Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (c) 2014 Spotify AB.
   *
   * 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 com.spotify.helios.common.descriptors;
 
 
 
 
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
 import static com.google.common.base.Charsets.UTF_8;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Throwables.propagate;
 import static com.spotify.helios.common.Hash.sha1digest;
 import static java.util.Collections.emptyList;
 import static java.util.Collections.emptyMap;

Represents a Helios job. An sample expression of it in JSON might be:
 {
   "command" : [ "server", "serverconfig.yaml" ],
   "env" : {
     "JVM_ARGS" : "-Ddw.feature.randomFeatureFlagEnabled=true"
   },
   "expires" : null,
   "gracePeriod": 60,
   "healthCheck" : {
     "type" : "http",
     "path" : "/healthcheck",
     "port" : "http-admin"
   },
   "id" : "myservice:0.5:3539b7bc2235d53f79e6e8511942bbeaa8816265",
   "image" : "myregistry:80/janedoe/myservice:0.5-98c6ff4",
   "ports" : {
     "http" : {
       "externalPort" : 8060,
       "internalPort" : 8080,
       "protocol" : "tcp"
     },
     "http-admin" : {
       "externalPort" : 8061,
       "internalPort" : 8081,
       "protocol" : "tcp"
     }
   },
   "registration" : {
     "service/http" : {
       "ports" : {
         "http" : { }
       }
     }
   },
   "registrationDomain" : "",
   "token": "insecure-access-token",
   "volumes" : {
     "/destination/path/in/container.yaml:ro" : "/source/path/in/host.yaml"
   }
 }
 
 
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class Job extends Descriptor implements Comparable<Job> {
 
   public static final Map<StringStringEMPTY_ENV = emptyMap();
  public static final Resources EMPTY_RESOURCES = null;
  public static final Map<StringPortMappingEMPTY_PORTS = emptyMap();
  public static final List<StringEMPTY_COMMAND = emptyList();
  public static final Map<ServiceEndpointServicePortsEMPTY_REGISTRATION = emptyMap();
  public static final Integer EMPTY_GRACE_PERIOD = null;
  public static final Map<StringStringEMPTY_VOLUMES = emptyMap();
  public static final String EMPTY_MOUNT = "";
  public static final Date EMPTY_EXPIRES = null;
  public static final String EMPTY_REGISTRATION_DOMAIN = "";
  public static final String EMPTY_CREATING_USER = null;
  public static final String EMPTY_TOKEN = "";
  public static final HealthCheck EMPTY_HEALTH_CHECK = null;
  private final JobId id;
  private final String image;
  private final List<Stringcommand;
  private final Map<StringStringenv;
  private final Resources resources;
  private final Map<StringPortMappingports;
  private final Integer gracePeriod;
  private final Map<StringStringvolumes;
  private final Date expires;
  private final String registrationDomain;
  private final String creatingUser;
  private final String token;
  private final HealthCheck healthCheck;

  
Create a Job.

Parameters:
id The id of the job.
image The docker image to use.
command The command to pass to the container.
env Environment variables to set
resources Resource specification for the container.
ports The ports you wish to expose from the container.
registration Configuration information for the discovery service (if applicable)
gracePeriod How long to let the container run after deregistering with the discovery service. If nothing is configured in registration, this option is ignored.
volumes Docker volumes to mount.
expires If set, a timestamp at which the job and any deployments will be removed.
registrationDomain If set, overrides the default domain in which discovery service registration occurs. What is allowed here will vary based upon the discovery service plugin used.
creatingUser The user creating the job.
token The token needed to manipulate this job.
healthCheck A health check Helios will execute on the container.
  public Job(@JsonProperty("id"final JobId id,
             @JsonProperty("image"final String image,
             @JsonProperty("command") @Nullable final List<Stringcommand,
             @JsonProperty("env") @Nullable final Map<StringStringenv,
             @JsonProperty("resources") @Nullable final Resources resources,
             @JsonProperty("ports") @Nullable final Map<StringPortMappingports,
             @JsonProperty("registration") @Nullable
                 final Map<ServiceEndpointServicePortsregistration,
             @JsonProperty("gracePeriod") @Nullable final Integer gracePeriod,
             @JsonProperty("volumes") @Nullable final Map<StringStringvolumes,
             @JsonProperty("expires") @Nullable final Date expires,
             @JsonProperty("registrationDomain") @Nullable String registrationDomain,
             @JsonProperty("creatingUser") @Nullable String creatingUser,
             @JsonProperty("token") @Nullable String token,
             @JsonProperty("healthCheck") @Nullable HealthCheck healthCheck) {
    this. = id;
    this. = image;
    // Optional
    this. = Optional.fromNullable(command).or();
    this. = Optional.fromNullable(env).or();
    this. = Optional.fromNullable(resources).orNull();
    this. = Optional.fromNullable(ports).or();
    this. = Optional.fromNullable(registration).or();
    this. = Optional.fromNullable(gracePeriod).orNull();
    this. = Optional.fromNullable(volumes).or();
    this. = expires;
    this. = Optional.fromNullable(registrationDomain)
        .or();
    this. = Optional.fromNullable(creatingUser).orNull();
    this. = Optional.fromNullable(token).or();
    this. = Optional.fromNullable(healthCheck).orNull();
  }
  private Job(final JobId idfinal Builder.Parameters p) {
    this. = id;
    this. = p.image;
    this. = ImmutableList.copyOf(checkNotNull(p.command"command"));
    this. = ImmutableMap.copyOf(checkNotNull(p.env"env"));
    this. = p.resources;
    this. = ImmutableMap.copyOf(checkNotNull(p.ports"ports"));
    this. = ImmutableMap.copyOf(checkNotNull(p.registration"registration"));
    this. = p.gracePeriod;
    this. = ImmutableMap.copyOf(checkNotNull(p.volumes"volumes"));
    this. = p.expires;
    this. = Optional.fromNullable(p.registrationDomain)
        .or();
    this. = p.creatingUser;
    this. = p.token;
    this. = p.healthCheck;
  }
  public JobId getId() {
    return ;
  }
  public String getImage() {
    return ;
  }
  public List<StringgetCommand() {
    return ;
  }
  public Map<StringStringgetEnv() {
    return ;
  }
  public Resources getResources() {
    return ;
  }
  public Map<StringPortMappinggetPorts() {
    return ;
  }
    return ;
  }
    return ;
  }
  public Integer getGracePeriod() {
    return ;
  }
  public Map<StringStringgetVolumes() {
    return ;
  }
  public Date getExpires() {
    return ;
  }
  public String getCreatingUser() {
    return ;
  }
  public String getToken() {
    return ;
  }
  public HealthCheck getHealthCheck() {
    return ;
  }
  public static Builder newBuilder() {
    return new Builder();
  }
  public int compareTo(final Job o) {
    return .compareTo(o.getId());
  }
  public boolean equals(final Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    final Job job = (Jobo;
    if ( != null ? !.equals(job.command) : job.command != null) {
      return false;
    }
    if ( != null ? !.equals(job.env) : job.env != null) {
      return false;
    }
    if ( != null ? !.equals(job.resources) : job.resources != null) {
      return false;
    }
    if ( != null ? !.equals(job.expires) : job.expires != null) {
      return false;
    }
    if ( != null ? !.equals(job.id) : job.id != null) {
      return false;
    }
    if ( != null ? !.equals(job.image) : job.image != null) {
      return false;
    }
    if ( != null ? !.equals(job.ports) : job.ports != null) {
      return false;
    }
    if ( != null ? !.equals(job.registration) : job.registration != null) {
      return false;
    }
    if ( != null
        ? !.equals(job.registrationDomain)
        : job.registrationDomain != null) {
      return false;
    }
    if ( != null ? !.equals(job.gracePeriod) : job.gracePeriod != null) {
      return false;
    }
    if ( != null ? !.equals(job.volumes) : job.volumes != null) {
      return false;
    }
    if ( != null ? !.equals(job.creatingUser) : job.creatingUser != null) {
      return false;
    }
    if (!.equals(job.token)) {
      return false;
    }
    if ( != null ? !.equals(job.healthCheck) : job.healthCheck != null) {
      return false;
    }
    return true;
  }
  public int hashCode() {
    int result =  != null ? .hashCode() : 0;
    result = 31 * result + ( != null ? .hashCode() : 0);
    result = 31 * result + ( != null ? .hashCode() : 0);
    result = 31 * result + ( != null ? .hashCode() : 0);
    result = 31 * result + ( != null ? .hashCode() : 0);
    result = 31 * result + ( != null ? .hashCode() : 0);
    result = 31 * result + ( != null ? .hashCode() : 0);
    result = 31 * result + ( != null ? .hashCode() : 0);
    result = 31 * result + ( != null ? .hashCode() : 0);
    result = 31 * result + ( != null ? .hashCode() : 0);
    result = 31 * result + ( != null ? .hashCode() : 0);
    result = 31 * result + ( != null ? .hashCode() : 0);
    result = 31 * result + .hashCode();
    result = 31 * result + ( != null ? .hashCode() : 0);
    return result;
  }
  public String toString() {
    return Objects.toStringHelper(this)
        .add("id")
        .add("image")
        .add("command")
        .add("env")
        .add("resources")
        .add("ports")
        .add("registration")
        .add("gracePeriod")
        .add("expires")
        .add("registrationDomain")
        .add("creatingUser")
        .add("token")
        .add("healthCheck")
        .toString();
  }
  public Builder toBuilder() {
    final Builder builder = newBuilder();
    if ( != null) {
      builder.setName(.getName())
          .setVersion(.getVersion());
    }
    return builder.setImage()
        .setCommand()
        .setEnv()
        .setResources()
        .setPorts()
        .setGracePeriod()
        .setVolumes()
        .setExpires()
        .setToken()
        .setHealthCheck();
  }
  public static class Builder implements Cloneable {
    private final Parameters p;
    private String hash;
    private Builder() {
      this. = new Parameters();
    }
    public Builder(final String hashfinal Parameters parameters) {
      this. = hash;
      this. = parameters;
    }
    private static class Parameters implements Cloneable {
      public String registrationDomain;
      public String name;
      public String version;
      public String image;
      public List<Stringcommand;
      public Map<StringStringenv;
      public Resources resources;
      public Map<StringPortMappingports;
      public Integer gracePeriod;
      public Map<StringStringvolumes;
      public Date expires;
      public String creatingUser;
      public String token;
      public HealthCheck healthCheck;
      private Parameters() {
        this. = ;
        this. = Maps.newHashMap();
        this. = ;
        this. = Maps.newHashMap();
        this. = Maps.newHashMap();
        this. = ;
        this. = Maps.newHashMap();
        this. = ;
        this. = ;
        this. = ;
      }
      private Parameters(final Parameters p) {
        this. = p.name;
        this. = p.version;
        this. = p.image;
        this. = ImmutableList.copyOf(p.command);
        this. = Maps.newHashMap(p.env);
        this. = p.resources;
        this. = Maps.newHashMap(p.ports);
        this. = Maps.newHashMap(p.registration);
        this. = p.gracePeriod;
        this. = Maps.newHashMap(p.volumes);
        this. = p.expires;
        this. = p.registrationDomain;
        this. = p.creatingUser;
        this. = p.token;
        this. = p.healthCheck;
      }
    }
    public Builder setRegistrationDomain(final String domain) {
      this.. = domain;
      return this;
    }
    public Builder setCreatingUser(final String creatingUser) {
      this.. = creatingUser;
      return this;
    }
    public Builder setToken(final String token) {
      this.. = token;
      return this;
    }
    public Builder setHash(final String hash) {
      this. = hash;
      return this;
    }
    public Builder setName(final String name) {
      . = name;
      return this;
    }
    public Builder setVersion(final String version) {
      . = version;
      return this;
    }
    public Builder setImage(final String image) {
      . = image;
      return this;
    }
    public Builder setCommand(final List<Stringcommand) {
      . = ImmutableList.copyOf(command);
      return this;
    }
    public Builder setEnv(final Map<StringStringenv) {
      . = Maps.newHashMap(env);
      return this;
    }
    public Builder setResources(final Resources resources) {
      . = resources;
      return this;
    }
    public Builder addEnv(final String keyfinal String value) {
      ..put(keyvalue);
      return this;
    }
    public Builder setPorts(final Map<StringPortMappingports) {
      . = Maps.newHashMap(ports);
      return this;
    }
    public Builder addPort(final String namefinal PortMapping port) {
      ..put(nameport);
      return this;
    }
    public Builder setRegistration(final Map<ServiceEndpointServicePortsregistration) {
      . = Maps.newHashMap(registration);
      return this;
    }
    public Builder addRegistration(final ServiceEndpoint endpointfinal ServicePorts ports) {
      ..put(endpointports);
      return this;
    }
    public Builder setGracePeriod(final Integer gracePeriod) {
      . = gracePeriod;
      return this;
    }
    public Builder setVolumes(final Map<StringStringvolumes) {
      . = Maps.newHashMap(volumes);
      return this;
    }
    public Builder addVolume(final String path) {
      ..put(path);
      return this;
    }
    public Builder addVolume(final String pathfinal String source) {
      ..put(pathsource);
      return this;
    }
    public Builder setExpires(final Date expires) {
      . = expires;
      return this;
    }
    public Builder setHealthCheck(final HealthCheck healthCheck) {
      . = healthCheck;
      return this;
    }
    public String getName() {
      return .;
    }
    public String getVersion() {
      return .;
    }
    public String getImage() {
      return .;
    }
    public List<StringgetCommand() {
      return .;
    }
    public Map<StringStringgetEnv() {
      return ImmutableMap.copyOf(.);
    }
    public Map<StringPortMappinggetPorts() {
      return ImmutableMap.copyOf(.);
    }
      return ImmutableMap.copyOf(.);
    }
    public String getRegistrationDomain() {
      return .;
    }
    public Integer getGracePeriod() {
      return .;
    }
    public Map<StringStringgetVolumes() {
      return ImmutableMap.copyOf(.);
    }
    public Date getExpires() {
      return .;
    }
    public String getCreatingUser() {
      return .;
    }
    public Resources getResources() {
      return .;
    }
    public HealthCheck getHealthCheck() {
      return .;
    }
    @SuppressWarnings({"CloneDoesntDeclareCloneNotSupportedException""CloneDoesntCallSuperClone"})
    @Override
    public Builder clone() {
      return new Builder(new Parameters());
    }
    public Job build() {
      final String configHash;
      try {
        configHash = hex(Json.sha1digest());
      } catch (IOException e) {
        throw propagate(e);
      }
      final String hash;
      if (!Strings.isNullOrEmpty(this.)) {
        hash = this.;
      } else {
        if (. != null && . != null) {
          final String input = String.format("%s:%s:%s"..configHash);
          hash = hex(sha1digest(input.getBytes()));
        } else {
          hash = null;
        }
      }
      final JobId id = new JobId(..hash);
      return new Job(id);
    }
    private String hex(final byte[] bytes) {
      return BaseEncoding.base16().lowerCase().encode(bytes);
    }
  }
New to GrepCode? Check out our FAQ X