blob: 99decf14b19bed30cce570737d81f36a2e453fe4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.submarine.server.submitter.k8s.util;
import java.util.List;
import io.kubernetes.client.models.V1DeleteOptions;
import io.kubernetes.client.models.V1DeleteOptionsBuilder;
import io.kubernetes.client.models.V1JobCondition;
import io.kubernetes.client.models.V1JobStatus;
import io.kubernetes.client.models.V1Status;
import io.kubernetes.client.models.V1StatusDetails;
import org.apache.submarine.server.api.experiment.Experiment;
import org.apache.submarine.server.submitter.k8s.model.MLJob;
import org.joda.time.DateTime;
/**
* Converter for different types.
* Such as MLJob to Job, V1Status to Job and others.
*/
public class MLJobConverter {
public static Experiment toJobFromMLJob(MLJob mlJob) {
Experiment experiment = new Experiment();
experiment.setUid(mlJob.getMetadata().getUid());
experiment.setName(mlJob.getMetadata().getName());
DateTime dateTime = mlJob.getMetadata().getCreationTimestamp();
if (dateTime != null) {
experiment.setAcceptedTime(dateTime.toString());
experiment.setStatus(Experiment.Status.STATUS_ACCEPTED.getValue());
}
V1JobStatus status = mlJob.getStatus();
if (status != null) {
dateTime = status.getStartTime();
if (dateTime != null) {
experiment.setCreatedTime(dateTime.toString());
experiment.setStatus(Experiment.Status.STATUS_CREATED.getValue());
}
List<V1JobCondition> conditions = status.getConditions();
if (conditions != null && conditions.size() > 1) {
experiment.setStatus(Experiment.Status.STATUS_RUNNING.getValue());
for (V1JobCondition condition : conditions) {
if (condition.getType().toLowerCase().equals("running")) {
dateTime = condition.getLastTransitionTime();
experiment.setRunningTime(dateTime.toString());
break;
}
}
}
dateTime = status.getCompletionTime();
if (dateTime != null) {
experiment.setFinishedTime(dateTime.toString());
experiment.setStatus(Experiment.Status.STATUS_SUCCEEDED.getValue());
}
}
return experiment;
}
public static Experiment toJobFromStatus(V1Status status) {
Experiment experiment = new Experiment();
V1StatusDetails details = status.getDetails();
if (details != null) {
experiment.setUid(details.getUid());
experiment.setName(details.getName());
}
if (status.getStatus().toLowerCase().equals("success")) {
experiment.setStatus(Experiment.Status.STATUS_DELETED.getValue());
}
return experiment;
}
public static V1DeleteOptions toDeleteOptionsFromMLJob(MLJob job) {
return new V1DeleteOptionsBuilder().withApiVersion(job.getApiVersion()).build();
}
}