package com.hubspot.singularity.mesos; import static java.nio.charset.StandardCharsets.UTF_8; import com.google.inject.Inject; import com.google.inject.Singleton; import com.hubspot.singularity.SingularityCreateResult; import com.hubspot.singularity.SingularityTaskShellCommandUpdate; import com.hubspot.singularity.data.TaskManager; import com.hubspot.singularity.data.transcoders.SingularityTranscoderException; import com.hubspot.singularity.data.transcoders.Transcoder; import org.apache.mesos.v1.Protos; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Singleton public class SingularityMesosFrameworkMessageHandler { private static final Logger LOG = LoggerFactory.getLogger( SingularityMesosFrameworkMessageHandler.class ); private final TaskManager taskManager; private final Transcoder<SingularityTaskShellCommandUpdate> commandUpdateTranscoder; @Inject public SingularityMesosFrameworkMessageHandler( TaskManager taskManager, Transcoder<SingularityTaskShellCommandUpdate> commandUpdateTranscoder ) { this.taskManager = taskManager; this.commandUpdateTranscoder = commandUpdateTranscoder; } public void handleMessage( Protos.ExecutorID executorId, Protos.AgentID slaveId, byte[] data ) { SingularityTaskShellCommandUpdate shellUpdate = null; try { shellUpdate = commandUpdateTranscoder.fromBytes(data); SingularityCreateResult saved = taskManager.saveTaskShellCommandUpdate(shellUpdate); LOG.debug("Saved {} with result {}", shellUpdate, saved); } catch (SingularityTranscoderException ste) { LOG.warn("Framework message {} not a commandUpdate", new String(data, UTF_8)); } catch (Exception e) { LOG.error("While processing framework message {}", shellUpdate, e); } } }