Search in sources :

Example 6 with SimulationMessage

use of cbit.vcell.solver.server.SimulationMessage in project vcell by virtualcell.

the class WorkerEventMessage method parseMessage.

/**
 * Insert the method's description here.
 * Creation date: (2/5/2004 2:19:48 PM)
 * @param message javax.jms.Message
 * @throws DataAccessException
 * @throws SQLException
 */
private void parseMessage(UserResolver userResolver, VCMessage message) throws DataAccessException, SQLException {
    if (message == null) {
        throw new RuntimeException("Null message");
    }
    if (!message.propertyExists(VCMessagingConstants.MESSAGE_TYPE_PROPERTY)) {
        throw new RuntimeException("Wrong message: expecting property " + VCMessagingConstants.MESSAGE_TYPE_PROPERTY);
    }
    String msgType = message.getStringProperty(VCMessagingConstants.MESSAGE_TYPE_PROPERTY);
    if (msgType != null && !msgType.equals(MessageConstants.MESSAGE_TYPE_WORKEREVENT_VALUE)) {
        throw new RuntimeException("Wrong message type: " + msgType + ", expecting: " + MessageConstants.MESSAGE_TYPE_WORKEREVENT_VALUE);
    }
    Object obj = message.getObjectContent();
    if (obj != null) {
        if (obj instanceof WorkerEvent) {
            // from Java executable or htcWorker
            workerEvent = (WorkerEvent) obj;
        } else if (obj instanceof String) {
            // from c++ executable (REST API where message stored as a single JSON object)
            String jsonContent = (String) obj;
            System.out.println("received JSON from message: " + jsonContent);
        } else {
            throw new IllegalArgumentException("Expecting object message with object " + WorkerEvent.class.getName() + ", found object :" + obj.getClass().getName());
        }
    } else {
        // from c++ executable (activemq-cpp native protocol communication library)
        int status = message.getIntProperty(MessageConstants.WORKEREVENT_STATUS);
        String hostname = message.getStringProperty(MessageConstants.HOSTNAME_PROPERTY);
        String username = message.getStringProperty(VCMessagingConstants.USERNAME_PROPERTY);
        int taskID = message.getIntProperty(MessageConstants.TASKID_PROPERTY);
        int jobIndex = message.getIntProperty(MessageConstants.JOBINDEX_PROPERTY);
        Long longkey = message.getLongProperty(MessageConstants.SIMKEY_PROPERTY);
        KeyValue simKey = new KeyValue(longkey + "");
        // Simulation sim = null;
        User user = userResolver.getUser(username);
        VCSimulationIdentifier vcSimID = new VCSimulationIdentifier(simKey, user);
        String statusMessage = null;
        Double progress = null;
        Double timepoint = null;
        if (message.propertyExists(MessageConstants.WORKEREVENT_STATUSMSG)) {
            statusMessage = message.getStringProperty(MessageConstants.WORKEREVENT_STATUSMSG);
        }
        if (message.propertyExists(MessageConstants.WORKEREVENT_PROGRESS)) {
            progress = message.getDoubleProperty(MessageConstants.WORKEREVENT_PROGRESS);
        }
        if (message.propertyExists(MessageConstants.WORKEREVENT_TIMEPOINT)) {
            timepoint = message.getDoubleProperty(MessageConstants.WORKEREVENT_TIMEPOINT);
        }
        SimulationMessage simulationMessage = SimulationMessage.fromSerializedMessage(statusMessage);
        if (simulationMessage == null) {
            switch(status) {
                case WorkerEvent.JOB_ACCEPTED:
                    throw new RuntimeException("unexpected job_accepted status");
                case WorkerEvent.JOB_STARTING:
                    if (statusMessage == null) {
                        simulationMessage = SimulationMessage.MESSAGE_WORKEREVENT_STARTING;
                    } else {
                        simulationMessage = SimulationMessage.workerStarting(statusMessage);
                    }
                    break;
                case WorkerEvent.JOB_DATA:
                    simulationMessage = SimulationMessage.workerData(timepoint);
                    break;
                case WorkerEvent.JOB_PROGRESS:
                    simulationMessage = SimulationMessage.workerProgress(progress);
                    break;
                case WorkerEvent.JOB_FAILURE:
                    if (statusMessage == null) {
                        simulationMessage = SimulationMessage.MESSAGE_WORKEREVENT_FAILURE;
                    } else {
                        simulationMessage = SimulationMessage.workerFailure(statusMessage);
                    }
                    break;
                case WorkerEvent.JOB_COMPLETED:
                    if (statusMessage == null) {
                        simulationMessage = SimulationMessage.MESSAGE_WORKEREVENT_COMPLETED;
                    } else {
                        simulationMessage = SimulationMessage.workerCompleted(statusMessage);
                    }
                    break;
                case WorkerEvent.JOB_WORKER_ALIVE:
                    simulationMessage = SimulationMessage.MESSAGE_WORKEREVENT_WORKERALIVE;
                    break;
                default:
                    throw new RuntimeException("unexpected worker event status : " + status);
            }
        }
        ServiceName serviceName = VCMongoMessage.getServiceName();
        workerEvent = new WorkerEvent(status, serviceName, vcSimID, jobIndex, hostname, taskID, progress, timepoint, simulationMessage);
    }
}
Also used : VCSimulationIdentifier(cbit.vcell.solver.VCSimulationIdentifier) KeyValue(org.vcell.util.document.KeyValue) User(org.vcell.util.document.User) WorkerEvent(cbit.rmi.event.WorkerEvent) ServiceName(cbit.vcell.mongodb.VCMongoMessage.ServiceName) SimulationMessage(cbit.vcell.solver.server.SimulationMessage)

Aggregations

SimulationMessage (cbit.vcell.solver.server.SimulationMessage)6 SimulationExecutionStatus (cbit.vcell.server.SimulationExecutionStatus)3 SimulationJobStatus (cbit.vcell.server.SimulationJobStatus)3 SchedulerStatus (cbit.vcell.server.SimulationJobStatus.SchedulerStatus)3 SimulationQueueEntryStatus (cbit.vcell.server.SimulationQueueEntryStatus)3 VCSimulationIdentifier (cbit.vcell.solver.VCSimulationIdentifier)3 Date (java.util.Date)3 KeyValue (org.vcell.util.document.KeyValue)3 VCellServerID (org.vcell.util.document.VCellServerID)3 HtcJobID (cbit.vcell.server.HtcJobID)2 User (org.vcell.util.document.User)2 WorkerEvent (cbit.rmi.event.WorkerEvent)1 VCMessagingException (cbit.vcell.message.VCMessagingException)1 StatusMessage (cbit.vcell.message.messages.StatusMessage)1 WorkerEventMessage (cbit.vcell.message.messages.WorkerEventMessage)1 VCellServiceMXBeanImpl (cbit.vcell.message.server.jmx.VCellServiceMXBeanImpl)1 SimulationTask (cbit.vcell.messaging.server.SimulationTask)1 ServiceName (cbit.vcell.mongodb.VCMongoMessage.ServiceName)1 RunningStateInfo (cbit.vcell.server.RunningStateInfo)1 SimulationQueueID (cbit.vcell.server.SimulationJobStatus.SimulationQueueID)1