package com.hujiang.juice.service.model;
import com.google.protobuf.ByteString;
import com.hujiang.juice.common.model.TaskManagement;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import static org.apache.mesos.v1.Protos.*;
import static org.apache.mesos.v1.scheduler.Protos.Call;
/**
* Created by xujia on 16/11/22.
*/
public class SchedulerCalls {
private SchedulerCalls() {}
@NotNull
public static Call kill(@NotNull final FrameworkID frameworkId,
@NotNull final TaskManagement.TaskAgentRel taskAgentRel
) {
return Call.newBuilder()
.setFrameworkId(frameworkId)
.setType(Call.Type.KILL)
.setKill(
Call.Kill.newBuilder()
.setTaskId(taskAgentRel.protosTaskId())
.setAgentId(taskAgentRel.protosAgentId())
.build()
).build();
}
@NotNull
public static Call reconcile(@NotNull final FrameworkID frameworkId,
@NotNull final List<TaskManagement.TaskAgentRel> taskAgentRels
) {
Call.Reconcile.Builder builder = Call.Reconcile.newBuilder();
taskAgentRels.stream().parallel().forEach(
taskAgentRel -> {
builder.addTasks(Call.Reconcile.Task.newBuilder()
.setAgentId(taskAgentRel.protosAgentId())
.setTaskId(taskAgentRel.protosTaskId())
.build());
}
);
return Call.newBuilder()
.setFrameworkId(frameworkId)
.setType(Call.Type.RECONCILE)
.setReconcile(builder)
.build();
}
@NotNull
public static Call tearDown(@NotNull final FrameworkID frameworkId){
return Call.newBuilder()
.setFrameworkId(frameworkId)
.setType(Call.Type.TEARDOWN)
.build();
}
@NotNull
public static Call ackUpdate(
@NotNull final FrameworkID frameworkId,
@NotNull final ByteString uuid,
@NotNull final AgentID agentId,
@NotNull final TaskID taskId
) {
return Call.newBuilder()
.setFrameworkId(frameworkId)
.setType(Call.Type.ACKNOWLEDGE)
.setAcknowledge(
Call.Acknowledge.newBuilder()
.setUuid(uuid)
.setAgentId(agentId)
.setTaskId(taskId)
.build()
)
.build();
}
public static @NotNull
Call accept(
final @NotNull FrameworkID frameworkId,
final @NotNull OfferID offerId,
@NotNull final List<TaskInfo> tasks
) {
return Call.newBuilder()
.setFrameworkId(frameworkId)
.setType(Call.Type.ACCEPT)
.setAccept(
Call.Accept.newBuilder()
.addOfferIds(offerId)
.addOperations(
Offer.Operation.newBuilder()
.setType(Offer.Operation.Type.LAUNCH)
.setLaunch(
Offer.Operation.Launch.newBuilder()
.addAllTaskInfos(tasks)
)
)
)
.build();
}
@NotNull
public static Call decline(@NotNull final FrameworkID frameworkId, @NotNull final List<OfferID> offerIds) {
return Call.newBuilder()
.setFrameworkId(frameworkId)
.setType(Call.Type.DECLINE)
.setDecline(
Call.Decline.newBuilder()
.addAllOfferIds(offerIds)
)
.build();
}
@NotNull
public static Call subscribe(
@NotNull final String frameworkId,
@NotNull final String user,
@NotNull final String frameworkName,
final long failoverTimeoutSeconds
) {
final FrameworkID frameworkID = FrameworkID.newBuilder().setValue(frameworkId).build();
return subscribe(frameworkID, user, frameworkName, failoverTimeoutSeconds);
}
@NotNull
public static Call subscribe(
@NotNull final FrameworkID frameworkId,
@NotNull final String user,
@NotNull final String frameworkName,
final long failoverTimeoutSeconds
) {
final FrameworkInfo frameworkInfo = FrameworkInfo.newBuilder()
.setId(frameworkId)
.setUser(user)
.setName(frameworkName)
.setFailoverTimeout(failoverTimeoutSeconds)
.build();
return subscribe(frameworkInfo);
}
@NotNull
public static Call subscribe(
@NotNull final FrameworkInfo frameworkInfo
) {
return Call.newBuilder()
.setFrameworkId(frameworkInfo.getId())
.setType(Call.Type.SUBSCRIBE)
.setSubscribe(
Call.Subscribe.newBuilder()
.setFrameworkInfo(frameworkInfo)
)
.build();
}
}