http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/main/java/org/apache/slider/api/proto/RestTypeMarshalling.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/api/proto/RestTypeMarshalling.java
 
b/slider-core/src/main/java/org/apache/slider/api/proto/RestTypeMarshalling.java
new file mode 100644
index 0000000..dffe239
--- /dev/null
+++ 
b/slider-core/src/main/java/org/apache/slider/api/proto/RestTypeMarshalling.java
@@ -0,0 +1,133 @@
+/*
+ * 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.slider.api.proto;
+
+import org.apache.slider.api.types.ApplicationLivenessInformation;
+import org.apache.slider.api.types.ComponentInformation;
+import org.apache.slider.api.types.ContainerInformation;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+
+/**
+ * Class to handle marshalling of REST
+ * types to/from Protobuf records.
+ */
+public class RestTypeMarshalling {
+
+  public static Messages.ApplicationLivenessInformationProto
+  marshall(ApplicationLivenessInformation info) {
+
+    Messages.ApplicationLivenessInformationProto.Builder builder =
+        Messages.ApplicationLivenessInformationProto.newBuilder();
+    builder.setAllRequestsSatisfied(info.allRequestsSatisfied);
+    builder.setRequestsOutstanding(info.requestsOutstanding);
+    return builder.build();
+  }
+
+  public static ApplicationLivenessInformation
+  unmarshall(Messages.ApplicationLivenessInformationProto wire) {
+    ApplicationLivenessInformation info = new ApplicationLivenessInformation();
+    info.allRequestsSatisfied = wire.getAllRequestsSatisfied();
+    info.requestsOutstanding = wire.getRequestsOutstanding();
+    return info;
+  }
+
+  public static Messages.ComponentInformationProto
+  marshall(ComponentInformation info) {
+
+    Messages.ComponentInformationProto.Builder builder =
+        Messages.ComponentInformationProto.newBuilder();
+    builder.setName(info.name);
+    builder.setPriority(info.priority);
+    builder.setPlacementPolicy(info.placementPolicy);
+    builder.setDesired(info.desired);
+    builder.setActual(info.actual);
+    builder.setReleasing(info.releasing);
+    builder.setRequested(info.requested);
+    builder.setFailed(info.failed);
+    builder.setStarted(info.started);
+    builder.setStartFailed(info.startFailed);
+    builder.setCompleted(info.completed);
+    builder.setTotalRequested(info.totalRequested);
+    if (info.failureMessage !=null) {
+      builder.setFailureMessage(info.failureMessage);
+    }
+    if (info.containers != null) {
+      builder.addAllContainers(info.containers);
+    }
+    return builder.build();
+  }
+
+  public static ContainerInformation
+  unmarshall(Messages.ContainerInformationProto wire) {
+    ContainerInformation info = new ContainerInformation();
+    info.containerId = wire.getContainerId();
+    info.component = wire.getComponent();
+    info.released = wire.getReleased();
+    if (wire.hasReleased()) {
+    }
+    info.state = wire.getDesired();
+    info.exitCode = wire.getActual();
+    info.released = wire.getReleasing();
+    info.diagnostics = wire.getRequested();
+    info.createTime = wire.getFailed();
+    info.startTime = wire.getStarted();
+    info.host = wire.getStartFailed();
+    info.hostURL = wire.getCompleted();
+    info.totalRequested = wire.getTotalRequested();
+    if (wire.hasFailureMessage()) {
+      info.failureMessage = wire.getFailureMessage();
+    }
+    info.output = Collections.a 
+        new ArrayList<String>(wire.getOutputList());
+    return info;
+  }
+
+  public static Messages.ContainerInformationProto
+  marshall(ContainerInformation info) {
+
+    Messages.ContainerInformationProto.Builder builder =
+        Messages.ContainerInformationProto.newBuilder();
+    return builder.build();
+  }
+
+  public static ContainerInformation
+  unmarshall(Messages.ContainerInformationProto wire) {
+    ContainerInformation info = new ContainerInformation();
+    info.name = wire.getName();
+    info.priority = wire.getPriority();
+    info.placementPolicy = wire.getPlacementPolicy();
+    info.desired = wire.getDesired();
+    info.actual = wire.getActual();
+    info.releasing = wire.getReleasing();
+    info.requested = wire.getRequested();
+    info.failed = wire.getFailed();
+    info.started = wire.getStarted();
+    info.startFailed = wire.getStartFailed();
+    info.completed = wire.getCompleted();
+    info.totalRequested = wire.getTotalRequested();
+    if (wire.hasFailureMessage()) {
+      info.failureMessage = wire.getFailureMessage();
+    }
+    info.containers = new ArrayList<String>(wire.getContainersList());
+    return info;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java 
b/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java
index 75bf05b..b97a6e6 100644
--- 
a/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java
+++ 
b/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java
@@ -1,22 +1,6 @@
-/*
- * 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.
- */
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: SliderClusterProtocol.proto
+
 package org.apache.slider.api.proto;
 
 public final class SliderClusterAPI {
@@ -165,6 +149,46 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.AMSuicideRequestProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.AMSuicideResponseProto>
 done);
 
+      /**
+       * <code>rpc 
getLivenessInformation(.org.apache.slider.api.GetApplicationLivenessRequestProto)
 returns (.org.apache.slider.api.ApplicationLivenessInformationProto);</code>
+       */
+      public abstract void getLivenessInformation(
+          com.google.protobuf.RpcController controller,
+          
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto request,
+          
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto>
 done);
+
+      /**
+       * <code>rpc 
getLiveContainers(.org.apache.slider.api.GetLiveContainersRequestProto) returns 
(.org.apache.slider.api.GetLiveContainersResponseProto);</code>
+       */
+      public abstract void getLiveContainers(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto>
 done);
+
+      /**
+       * <code>rpc 
getLiveContainer(.org.apache.slider.api.GetLiveContainerRequestProto) returns 
(.org.apache.slider.api.ContainerInformationProto);</code>
+       */
+      public abstract void getLiveContainer(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ContainerInformationProto>
 done);
+
+      /**
+       * <code>rpc 
getLiveComponents(.org.apache.slider.api.GetLiveComponentsRequestProto) returns 
(.org.apache.slider.api.GetLiveComponentsResponseProto);</code>
+       */
+      public abstract void getLiveComponents(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto>
 done);
+
+      /**
+       * <code>rpc 
getLiveComponent(.org.apache.slider.api.GetLiveComponentRequestProto) returns 
(.org.apache.slider.api.ComponentInformationProto);</code>
+       */
+      public abstract void getLiveComponent(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ComponentInformationProto>
 done);
+
     }
 
     public static com.google.protobuf.Service newReflectiveService(
@@ -250,6 +274,46 @@ public final class SliderClusterAPI {
           impl.amSuicide(controller, request, done);
         }
 
+        @java.lang.Override
+        public  void getLivenessInformation(
+            com.google.protobuf.RpcController controller,
+            
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto request,
+            
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto>
 done) {
+          impl.getLivenessInformation(controller, request, done);
+        }
+
+        @java.lang.Override
+        public  void getLiveContainers(
+            com.google.protobuf.RpcController controller,
+            org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto 
request,
+            
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto>
 done) {
+          impl.getLiveContainers(controller, request, done);
+        }
+
+        @java.lang.Override
+        public  void getLiveContainer(
+            com.google.protobuf.RpcController controller,
+            org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto 
request,
+            
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ContainerInformationProto>
 done) {
+          impl.getLiveContainer(controller, request, done);
+        }
+
+        @java.lang.Override
+        public  void getLiveComponents(
+            com.google.protobuf.RpcController controller,
+            org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto 
request,
+            
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto>
 done) {
+          impl.getLiveComponents(controller, request, done);
+        }
+
+        @java.lang.Override
+        public  void getLiveComponent(
+            com.google.protobuf.RpcController controller,
+            org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto 
request,
+            
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ComponentInformationProto>
 done) {
+          impl.getLiveComponent(controller, request, done);
+        }
+
       };
     }
 
@@ -292,6 +356,16 @@ public final class SliderClusterAPI {
               return impl.killContainer(controller, 
(org.apache.slider.api.proto.Messages.KillContainerRequestProto)request);
             case 9:
               return impl.amSuicide(controller, 
(org.apache.slider.api.proto.Messages.AMSuicideRequestProto)request);
+            case 10:
+              return impl.getLivenessInformation(controller, 
(org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto)request);
+            case 11:
+              return impl.getLiveContainers(controller, 
(org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto)request);
+            case 12:
+              return impl.getLiveContainer(controller, 
(org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto)request);
+            case 13:
+              return impl.getLiveComponents(controller, 
(org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto)request);
+            case 14:
+              return impl.getLiveComponent(controller, 
(org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto)request);
             default:
               throw new java.lang.AssertionError("Can't get here.");
           }
@@ -326,6 +400,16 @@ public final class SliderClusterAPI {
               return 
org.apache.slider.api.proto.Messages.KillContainerRequestProto.getDefaultInstance();
             case 9:
               return 
org.apache.slider.api.proto.Messages.AMSuicideRequestProto.getDefaultInstance();
+            case 10:
+              return 
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto.getDefaultInstance();
+            case 11:
+              return 
org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto.getDefaultInstance();
+            case 12:
+              return 
org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto.getDefaultInstance();
+            case 13:
+              return 
org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto.getDefaultInstance();
+            case 14:
+              return 
org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto.getDefaultInstance();
             default:
               throw new java.lang.AssertionError("Can't get here.");
           }
@@ -360,6 +444,16 @@ public final class SliderClusterAPI {
               return 
org.apache.slider.api.proto.Messages.KillContainerResponseProto.getDefaultInstance();
             case 9:
               return 
org.apache.slider.api.proto.Messages.AMSuicideResponseProto.getDefaultInstance();
+            case 10:
+              return 
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto.getDefaultInstance();
+            case 11:
+              return 
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto.getDefaultInstance();
+            case 12:
+              return 
org.apache.slider.api.proto.Messages.ContainerInformationProto.getDefaultInstance();
+            case 13:
+              return 
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto.getDefaultInstance();
+            case 14:
+              return 
org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance();
             default:
               throw new java.lang.AssertionError("Can't get here.");
           }
@@ -496,6 +590,46 @@ public final class SliderClusterAPI {
         org.apache.slider.api.proto.Messages.AMSuicideRequestProto request,
         
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.AMSuicideResponseProto>
 done);
 
+    /**
+     * <code>rpc 
getLivenessInformation(.org.apache.slider.api.GetApplicationLivenessRequestProto)
 returns (.org.apache.slider.api.ApplicationLivenessInformationProto);</code>
+     */
+    public abstract void getLivenessInformation(
+        com.google.protobuf.RpcController controller,
+        
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto request,
+        
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto>
 done);
+
+    /**
+     * <code>rpc 
getLiveContainers(.org.apache.slider.api.GetLiveContainersRequestProto) returns 
(.org.apache.slider.api.GetLiveContainersResponseProto);</code>
+     */
+    public abstract void getLiveContainers(
+        com.google.protobuf.RpcController controller,
+        org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto 
request,
+        
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto>
 done);
+
+    /**
+     * <code>rpc 
getLiveContainer(.org.apache.slider.api.GetLiveContainerRequestProto) returns 
(.org.apache.slider.api.ContainerInformationProto);</code>
+     */
+    public abstract void getLiveContainer(
+        com.google.protobuf.RpcController controller,
+        org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto 
request,
+        
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ContainerInformationProto>
 done);
+
+    /**
+     * <code>rpc 
getLiveComponents(.org.apache.slider.api.GetLiveComponentsRequestProto) returns 
(.org.apache.slider.api.GetLiveComponentsResponseProto);</code>
+     */
+    public abstract void getLiveComponents(
+        com.google.protobuf.RpcController controller,
+        org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto 
request,
+        
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto>
 done);
+
+    /**
+     * <code>rpc 
getLiveComponent(.org.apache.slider.api.GetLiveComponentRequestProto) returns 
(.org.apache.slider.api.ComponentInformationProto);</code>
+     */
+    public abstract void getLiveComponent(
+        com.google.protobuf.RpcController controller,
+        org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto 
request,
+        
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ComponentInformationProto>
 done);
+
     public static final
         com.google.protobuf.Descriptors.ServiceDescriptor
         getDescriptor() {
@@ -568,6 +702,31 @@ public final class SliderClusterAPI {
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.AMSuicideResponseProto>specializeCallback(
               done));
           return;
+        case 10:
+          this.getLivenessInformation(controller, 
(org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto)request,
+            
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto>specializeCallback(
+              done));
+          return;
+        case 11:
+          this.getLiveContainers(controller, 
(org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto)request,
+            
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto>specializeCallback(
+              done));
+          return;
+        case 12:
+          this.getLiveContainer(controller, 
(org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto)request,
+            
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.ContainerInformationProto>specializeCallback(
+              done));
+          return;
+        case 13:
+          this.getLiveComponents(controller, 
(org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto)request,
+            
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto>specializeCallback(
+              done));
+          return;
+        case 14:
+          this.getLiveComponent(controller, 
(org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto)request,
+            
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.ComponentInformationProto>specializeCallback(
+              done));
+          return;
         default:
           throw new java.lang.AssertionError("Can't get here.");
       }
@@ -602,6 +761,16 @@ public final class SliderClusterAPI {
           return 
org.apache.slider.api.proto.Messages.KillContainerRequestProto.getDefaultInstance();
         case 9:
           return 
org.apache.slider.api.proto.Messages.AMSuicideRequestProto.getDefaultInstance();
+        case 10:
+          return 
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto.getDefaultInstance();
+        case 11:
+          return 
org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto.getDefaultInstance();
+        case 12:
+          return 
org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto.getDefaultInstance();
+        case 13:
+          return 
org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto.getDefaultInstance();
+        case 14:
+          return 
org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto.getDefaultInstance();
         default:
           throw new java.lang.AssertionError("Can't get here.");
       }
@@ -636,6 +805,16 @@ public final class SliderClusterAPI {
           return 
org.apache.slider.api.proto.Messages.KillContainerResponseProto.getDefaultInstance();
         case 9:
           return 
org.apache.slider.api.proto.Messages.AMSuicideResponseProto.getDefaultInstance();
+        case 10:
+          return 
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto.getDefaultInstance();
+        case 11:
+          return 
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto.getDefaultInstance();
+        case 12:
+          return 
org.apache.slider.api.proto.Messages.ContainerInformationProto.getDefaultInstance();
+        case 13:
+          return 
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto.getDefaultInstance();
+        case 14:
+          return 
org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance();
         default:
           throw new java.lang.AssertionError("Can't get here.");
       }
@@ -806,6 +985,81 @@ public final class SliderClusterAPI {
             org.apache.slider.api.proto.Messages.AMSuicideResponseProto.class,
             
org.apache.slider.api.proto.Messages.AMSuicideResponseProto.getDefaultInstance()));
       }
+
+      public  void getLivenessInformation(
+          com.google.protobuf.RpcController controller,
+          
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto request,
+          
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto>
 done) {
+        channel.callMethod(
+          getDescriptor().getMethods().get(10),
+          controller,
+          request,
+          
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto.getDefaultInstance(),
+          com.google.protobuf.RpcUtil.generalizeCallback(
+            done,
+            
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto.class,
+            
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto.getDefaultInstance()));
+      }
+
+      public  void getLiveContainers(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto>
 done) {
+        channel.callMethod(
+          getDescriptor().getMethods().get(11),
+          controller,
+          request,
+          
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto.getDefaultInstance(),
+          com.google.protobuf.RpcUtil.generalizeCallback(
+            done,
+            
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto.class,
+            
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto.getDefaultInstance()));
+      }
+
+      public  void getLiveContainer(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ContainerInformationProto>
 done) {
+        channel.callMethod(
+          getDescriptor().getMethods().get(12),
+          controller,
+          request,
+          
org.apache.slider.api.proto.Messages.ContainerInformationProto.getDefaultInstance(),
+          com.google.protobuf.RpcUtil.generalizeCallback(
+            done,
+            
org.apache.slider.api.proto.Messages.ContainerInformationProto.class,
+            
org.apache.slider.api.proto.Messages.ContainerInformationProto.getDefaultInstance()));
+      }
+
+      public  void getLiveComponents(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto>
 done) {
+        channel.callMethod(
+          getDescriptor().getMethods().get(13),
+          controller,
+          request,
+          
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto.getDefaultInstance(),
+          com.google.protobuf.RpcUtil.generalizeCallback(
+            done,
+            
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto.class,
+            
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto.getDefaultInstance()));
+      }
+
+      public  void getLiveComponent(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ComponentInformationProto>
 done) {
+        channel.callMethod(
+          getDescriptor().getMethods().get(14),
+          controller,
+          request,
+          
org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance(),
+          com.google.protobuf.RpcUtil.generalizeCallback(
+            done,
+            
org.apache.slider.api.proto.Messages.ComponentInformationProto.class,
+            
org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance()));
+      }
     }
 
     public static BlockingInterface newBlockingStub(
@@ -863,6 +1117,31 @@ public final class SliderClusterAPI {
           com.google.protobuf.RpcController controller,
           org.apache.slider.api.proto.Messages.AMSuicideRequestProto request)
           throws com.google.protobuf.ServiceException;
+
+      public 
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto 
getLivenessInformation(
+          com.google.protobuf.RpcController controller,
+          
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto request)
+          throws com.google.protobuf.ServiceException;
+
+      public 
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto 
getLiveContainers(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto 
request)
+          throws com.google.protobuf.ServiceException;
+
+      public org.apache.slider.api.proto.Messages.ContainerInformationProto 
getLiveContainer(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto 
request)
+          throws com.google.protobuf.ServiceException;
+
+      public 
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto 
getLiveComponents(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto 
request)
+          throws com.google.protobuf.ServiceException;
+
+      public org.apache.slider.api.proto.Messages.ComponentInformationProto 
getLiveComponent(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto 
request)
+          throws com.google.protobuf.ServiceException;
     }
 
     private static final class BlockingStub implements BlockingInterface {
@@ -991,6 +1270,66 @@ public final class SliderClusterAPI {
           
org.apache.slider.api.proto.Messages.AMSuicideResponseProto.getDefaultInstance());
       }
 
+
+      public 
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto 
getLivenessInformation(
+          com.google.protobuf.RpcController controller,
+          
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto request)
+          throws com.google.protobuf.ServiceException {
+        return 
(org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto) 
channel.callBlockingMethod(
+          getDescriptor().getMethods().get(10),
+          controller,
+          request,
+          
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto.getDefaultInstance());
+      }
+
+
+      public 
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto 
getLiveContainers(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto 
request)
+          throws com.google.protobuf.ServiceException {
+        return 
(org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto) 
channel.callBlockingMethod(
+          getDescriptor().getMethods().get(11),
+          controller,
+          request,
+          
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto.getDefaultInstance());
+      }
+
+
+      public org.apache.slider.api.proto.Messages.ContainerInformationProto 
getLiveContainer(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto 
request)
+          throws com.google.protobuf.ServiceException {
+        return 
(org.apache.slider.api.proto.Messages.ContainerInformationProto) 
channel.callBlockingMethod(
+          getDescriptor().getMethods().get(12),
+          controller,
+          request,
+          
org.apache.slider.api.proto.Messages.ContainerInformationProto.getDefaultInstance());
+      }
+
+
+      public 
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto 
getLiveComponents(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto 
request)
+          throws com.google.protobuf.ServiceException {
+        return 
(org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto) 
channel.callBlockingMethod(
+          getDescriptor().getMethods().get(13),
+          controller,
+          request,
+          
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto.getDefaultInstance());
+      }
+
+
+      public org.apache.slider.api.proto.Messages.ComponentInformationProto 
getLiveComponent(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto 
request)
+          throws com.google.protobuf.ServiceException {
+        return 
(org.apache.slider.api.proto.Messages.ComponentInformationProto) 
channel.callBlockingMethod(
+          getDescriptor().getMethods().get(14),
+          controller,
+          request,
+          
org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance());
+      }
+
     }
 
     // 
@@protoc_insertion_point(class_scope:org.apache.slider.api.SliderClusterProtocolPB)
@@ -1007,7 +1346,7 @@ public final class SliderClusterAPI {
     java.lang.String[] descriptorData = {
       "\n\033SliderClusterProtocol.proto\022\025org.apach" +
       "e.slider.api\032\033SliderClusterMessages.prot" +
-      "o2\270\t\n\027SliderClusterProtocolPB\022n\n\013stopClu" +
+      "o2\306\016\n\027SliderClusterProtocolPB\022n\n\013stopClu" +
       "ster\022..org.apache.slider.api.StopCluster" +
       "RequestProto\032/.org.apache.slider.api.Sto" +
       "pClusterResponseProto\022n\n\013flexCluster\022..o" +
@@ -1037,8 +1376,25 @@ public final class SliderClusterAPI {
       "KillContainerResponseProto\022h\n\tamSuicide\022",
       ",.org.apache.slider.api.AMSuicideRequest" +
       "Proto\032-.org.apache.slider.api.AMSuicideR" +
-      "esponseProtoB5\n\033org.apache.slider.api.pr" +
-      "otoB\020SliderClusterAPI\210\001\001\240\001\001"
+      "esponseProto\022\217\001\n\026getLivenessInformation\022" +
+      "9.org.apache.slider.api.GetApplicationLi" +
+      "venessRequestProto\032:.org.apache.slider.a" +
+      "pi.ApplicationLivenessInformationProto\022\200" +
+      "\001\n\021getLiveContainers\0224.org.apache.slider" +
+      ".api.GetLiveContainersRequestProto\0325.org" +
+      ".apache.slider.api.GetLiveContainersResp" +
+      "onseProto\022y\n\020getLiveContainer\0223.org.apac",
+      "he.slider.api.GetLiveContainerRequestPro" +
+      "to\0320.org.apache.slider.api.ContainerInfo" +
+      "rmationProto\022\200\001\n\021getLiveComponents\0224.org" +
+      ".apache.slider.api.GetLiveComponentsRequ" +
+      "estProto\0325.org.apache.slider.api.GetLive" +
+      "ComponentsResponseProto\022y\n\020getLiveCompon" +
+      "ent\0223.org.apache.slider.api.GetLiveCompo" +
+      "nentRequestProto\0320.org.apache.slider.api" +
+      ".ComponentInformationProtoB5\n\033org.apache" +
+      ".slider.api.protoB\020SliderClusterAPI\210\001\001\240\001",
+      "\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner 
assigner =
       new 
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/main/java/org/apache/slider/api/types/ComponentInformation.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/api/types/ComponentInformation.java
 
b/slider-core/src/main/java/org/apache/slider/api/types/ComponentInformation.java
index 67a3053..ce36922 100644
--- 
a/slider-core/src/main/java/org/apache/slider/api/types/ComponentInformation.java
+++ 
b/slider-core/src/main/java/org/apache/slider/api/types/ComponentInformation.java
@@ -37,10 +37,10 @@ public class ComponentInformation {
   public String name;
   public int priority;
   public int desired, actual, releasing;
+  public int placementPolicy;
   public int requested;
   public int failed, started, startFailed, completed, totalRequested;
   public String failureMessage;
-  public int placementPolicy;
   public List<String> containers;
 
   /**

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/main/java/org/apache/slider/client/SliderClusterOperations.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/client/SliderClusterOperations.java
 
b/slider-core/src/main/java/org/apache/slider/client/SliderClusterOperations.java
index d722902..e711a0d 100644
--- 
a/slider-core/src/main/java/org/apache/slider/client/SliderClusterOperations.java
+++ 
b/slider-core/src/main/java/org/apache/slider/client/SliderClusterOperations.java
@@ -25,6 +25,9 @@ import org.apache.slider.api.ClusterNode;
 import org.apache.slider.api.SliderClusterProtocol;
 import org.apache.slider.api.StateValues;
 import org.apache.slider.api.proto.Messages;
+
+import static org.apache.slider.api.proto.RestTypeMarshalling.*;
+import org.apache.slider.api.types.ApplicationLivenessInformation;
 import org.apache.slider.common.tools.Duration;
 import org.apache.slider.core.conf.AggregateConf;
 import org.apache.slider.core.conf.ConfTree;
@@ -307,9 +310,8 @@ public class SliderClusterOperations {
    * @throws YarnException
    * @throws IOException
    */
-  public void amSuicide(String text, int signal, int delay) throws
-                                  YarnException,
-                                  IOException {
+  public void amSuicide(String text, int signal, int delay)
+      throws YarnException, IOException {
     Messages.AMSuicideRequestProto.Builder builder =
       Messages.AMSuicideRequestProto.newBuilder();
     if (text != null) {
@@ -323,5 +325,20 @@ public class SliderClusterOperations {
       appMaster.amSuicide(req);
   }
 
+  /**
+   * Get the application liveness
+   * @return current liveness information
+   * @throws IOException
+   */
+  public ApplicationLivenessInformation getLivenessInformation() throws 
IOException {
+    Messages.GetApplicationLivenessRequestProto.Builder builder =
+        Messages.GetApplicationLivenessRequestProto.newBuilder();
+    Messages.ApplicationLivenessInformationProto wire =
+        appMaster.getLivenessInformation(builder.build());
+    ApplicationLivenessInformation result = unmarshall(wire);
+    return result;
+
+  }
+
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolPBImpl.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolPBImpl.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolPBImpl.java
index d3bc98a..69ab0ee 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolPBImpl.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolPBImpl.java
@@ -161,5 +161,15 @@ public class SliderClusterProtocolPBImpl implements 
SliderClusterProtocolPB {
       throw wrap(e);
     }
   }
-  
+
+  @Override
+  public Messages.ApplicationLivenessInformationProto getLivenessInformation(
+      RpcController controller,
+      Messages.GetApplicationLivenessRequestProto request) throws
+      ServiceException {
+    try {
+      return real.getLivenessInformation(request);
+    } catch (Exception e) {
+      throw wrap(e);
+    }  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolProxy.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolProxy.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolProxy.java
index c1e0886..3f4c16b 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolProxy.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolProxy.java
@@ -43,6 +43,31 @@ public class SliderClusterProtocolProxy implements 
SliderClusterProtocol {
     this.address = address;
   }
 
+
+  @Override
+  public ProtocolSignature getProtocolSignature(String protocol,
+      long clientVersion,
+      int clientMethodsHash)
+      throws IOException {
+    if (!protocol.equals(RPC.getProtocolName(SliderClusterProtocolPB.class))) {
+      throw new IOException("Serverside implements " +
+                            RPC.getProtocolName(SliderClusterProtocolPB.class) 
+
+                            ". The following requested protocol is unknown: " +
+                            protocol);
+    }
+
+    return ProtocolSignature.getProtocolSignature(clientMethodsHash,
+        RPC.getProtocolVersion(
+            SliderClusterProtocol.class),
+        SliderClusterProtocol.class);
+  }
+
+  @Override
+  public long getProtocolVersion(String protocol, long clientVersion)
+      throws IOException {
+    return SliderClusterProtocol.versionID;
+  }
+  
   private IOException convert(ServiceException se) {
     IOException ioe = ProtobufHelper.getRemoteException(se);
     if (ioe instanceof RemoteException) {
@@ -170,26 +195,11 @@ public class SliderClusterProtocolProxy implements 
SliderClusterProtocol {
   }
 
   @Override
-  public ProtocolSignature getProtocolSignature(String protocol,
-                                                long clientVersion,
-                                                int clientMethodsHash) throws
-                                                                       
IOException {
-    if (!protocol.equals(RPC.getProtocolName(SliderClusterProtocolPB.class))) {
-      throw new IOException("Serverside implements " +
-                            RPC.getProtocolName(SliderClusterProtocolPB.class) 
+
-                            ". The following requested protocol is unknown: " +
-                            protocol);
-    }
-
-    return ProtocolSignature.getProtocolSignature(clientMethodsHash,
-                                                  RPC.getProtocolVersion(
-                                                    
SliderClusterProtocol.class),
-                                                  SliderClusterProtocol.class);
-  }
-
-  @Override
-  public long getProtocolVersion(String protocol, long clientVersion) throws
-                                                                      
IOException {
-    return SliderClusterProtocol.versionID;
-  }
+  public Messages.ApplicationLivenessInformationProto getLivenessInformation(
+      Messages.GetApplicationLivenessRequestProto request) throws IOException {
+    try {
+      return endpoint.getLivenessInformation(NULL_CONTROLLER, request);
+    } catch (ServiceException e) {
+      throw convert(e);
+    } }
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java
index e2f3644..596edaf 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java
@@ -26,6 +26,8 @@ import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.apache.slider.api.ClusterDescription;
 import org.apache.slider.api.SliderClusterProtocol;
 import org.apache.slider.api.proto.Messages;
+
+import org.apache.slider.api.types.ApplicationLivenessInformation;
 import org.apache.slider.core.conf.AggregateConf;
 import org.apache.slider.core.conf.ConfTree;
 import org.apache.slider.core.exceptions.ServiceNotReadyException;
@@ -48,6 +50,8 @@ import java.io.IOException;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
+import static org.apache.slider.api.proto.RestTypeMarshalling.*;
+
 /**
  * Implement the {@link SliderClusterProtocol}.
  */
@@ -58,7 +62,7 @@ public class SliderIPCService extends AbstractService
       LoggerFactory.getLogger(SliderClusterProtocol.class);
 
   private final QueueAccess actionQueues;
-  private final StateAccessForProviders appState;
+  private final StateAccessForProviders state;
   private final MetricsAndMonitoring metricsAndMonitoring;
   private final AppMasterActionOperations amOperations;
   
@@ -71,20 +75,20 @@ public class SliderIPCService extends AbstractService
   /**
    * Constructor
    * @param amOperations access to any AM operations
-   * @param appState state view
+   * @param state state view
    * @param actionQueues queues for actions
    * @param metricsAndMonitoring metrics
    */
   public SliderIPCService(AppMasterActionOperations amOperations,
-      StateAccessForProviders appState,
+      StateAccessForProviders state,
       QueueAccess actionQueues,
       MetricsAndMonitoring metricsAndMonitoring) {
     super("SliderIPCService");
     Preconditions.checkArgument(amOperations != null, "null amOperations");
-    Preconditions.checkArgument(appState != null, "null appState");
+    Preconditions.checkArgument(state != null, "null appState");
     Preconditions.checkArgument(actionQueues != null, "null actionQueues");
     Preconditions.checkArgument(metricsAndMonitoring != null, "null 
metricsAndMonitoring");
-    this.appState = appState;
+    this.state = state;
     this.actionQueues = actionQueues;
     this.metricsAndMonitoring = metricsAndMonitoring;
     this.amOperations = amOperations;
@@ -173,7 +177,7 @@ public class SliderIPCService extends AbstractService
     String result;
     //quick update
     //query and json-ify
-    ClusterDescription cd = appState.refreshClusterStatus();
+    ClusterDescription cd = state.refreshClusterStatus();
     result = cd.toJsonString();
     String stat = result;
     return Messages.GetJSONClusterStatusResponseProto.newBuilder()
@@ -191,7 +195,7 @@ public class SliderIPCService extends AbstractService
     String resources;
     String app;
     AggregateConf instanceDefinition =
-        appState.getInstanceDefinitionSnapshot();
+        state.getInstanceDefinitionSnapshot();
     internal = instanceDefinition.getInternal().toJson();
     resources = instanceDefinition.getResources().toJson();
     app = instanceDefinition.getAppConf().toJson();
@@ -214,7 +218,7 @@ public class SliderIPCService extends AbstractService
     String role = request.getRole();
     Messages.ListNodeUUIDsByRoleResponseProto.Builder builder =
         Messages.ListNodeUUIDsByRoleResponseProto.newBuilder();
-    List<RoleInstance> nodes = appState.enumLiveNodesInRole(role);
+    List<RoleInstance> nodes = state.enumLiveNodesInRole(role);
     for (RoleInstance node : nodes) {
       builder.addUuid(node.id);
     }
@@ -225,7 +229,7 @@ public class SliderIPCService extends AbstractService
   public Messages.GetNodeResponseProto getNode(Messages.GetNodeRequestProto 
request)
       throws IOException, YarnException {
     onRpcCall("getnode");
-    RoleInstance instance = appState.getLiveInstanceByContainerID(
+    RoleInstance instance = state.getLiveInstanceByContainerID(
         request.getUuid());
     return Messages.GetNodeResponseProto.newBuilder()
                                         .setClusterNode(instance.toProtobuf())
@@ -238,7 +242,7 @@ public class SliderIPCService extends AbstractService
       throws IOException, YarnException {
     onRpcCall("getclusternodes");
     List<RoleInstance>
-        clusterNodes = appState.getLiveInstancesByContainerIDs(
+        clusterNodes = state.getLiveInstancesByContainerIDs(
         request.getUuidList());
 
     Messages.GetClusterNodesResponseProto.Builder builder =
@@ -272,7 +276,7 @@ public class SliderIPCService extends AbstractService
     log.info("Kill Container {}", containerID);
     //throws NoSuchNodeException if it is missing
     RoleInstance instance =
-        appState.getLiveInstanceByContainerID(containerID);
+        state.getLiveInstanceByContainerID(containerID);
     queue(new ActionKillContainer(instance.getId(), 0, TimeUnit.MILLISECONDS,
         amOperations));
     Messages.KillContainerResponseProto.Builder builder =
@@ -300,4 +304,12 @@ public class SliderIPCService extends AbstractService
     schedule(action);
     return Messages.AMSuicideResponseProto.getDefaultInstance();
   }
+
+  @Override
+  public Messages.ApplicationLivenessInformationProto getLivenessInformation(
+      Messages.GetApplicationLivenessRequestProto request) throws IOException {
+    ApplicationLivenessInformation info =
+        state.getApplicationLivenessInformation();
+    return marshall(info);
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/main/proto/SliderClusterMessages.proto
----------------------------------------------------------------------
diff --git a/slider-core/src/main/proto/SliderClusterMessages.proto 
b/slider-core/src/main/proto/SliderClusterMessages.proto
index 6b30846..2c31c2e 100644
--- a/slider-core/src/main/proto/SliderClusterMessages.proto
+++ b/slider-core/src/main/proto/SliderClusterMessages.proto
@@ -16,19 +16,6 @@
  * limitations under the License.
  */
 
-/**
- * These .proto interfaces are private and stable.
- * Please see http://wiki.apache.org/hadoop/Compatibility
- * for what changes are allowed for a *stable* .proto interface.
- *
- * The generated java files are checked in to the Slider code base, so
- * if this file is changed, the java must be generated again with
- * mvn clean package -Pcompile-protobuf -DskipTests
- */
-
-// This file contains protocol buffers that are used throughout HDFS -- i.e.
-// by the client, server, and data transfer protocols.
-
 option java_package = "org.apache.slider.api.proto";
 option java_outer_classname = "Messages";
 option java_generic_services = true;
@@ -203,3 +190,121 @@ message GetInstanceDefinitionResponseProto {
   required string resources = 2;
   required string application = 3;
 }
+
+
+  /* ************************************************************************
+  
+  REST model and operations.
+  Below here the operations and payloads designed to mimic
+  the REST API. That API is now the source of those
+  specificatations; this is simply a derivative.
+  
+  **************************************************************************/
+
+/**
+ * See org.apache.slider.api.types.ApplicationLivenessInformation
+ */
+message ApplicationLivenessInformationProto {
+  optional bool allRequestsSatisfied = 1;
+  optional int32 requestsOutstanding = 2;
+}
+
+/*
+ * see org.apache.slider.api.types.ComponentInformation
+ */
+message ComponentInformationProto {
+  optional string name =  1;
+  optional int32 priority =  2;
+  optional int32 desired =  3;
+  optional int32 actual =  4;
+  optional int32 releasing =  5;
+  optional int32 requested =  6;
+  optional int32 failed =  7;
+  optional int32 started =  8;
+  optional int32 startFailed = 9;
+  optional int32 completed =  10;
+  optional int32 totalRequested =  11;
+  optional string failureMessage = 12  ;
+  optional int32 placementPolicy =  13;
+  repeated string containers =  14;   
+}
+
+/*
+ * see org.apache.slider.api.types.ContainerInformation
+ */
+message ContainerInformationProto {
+  optional string containerId = 1;
+  optional string component = 2;
+  optional bool released = 3;
+  optional int32 state = 4;
+  optional int32 exitCode = 5;
+  optional string diagnostics = 6;
+  optional int64 createTime = 7;
+  optional int64 startTime = 8;
+  repeated string output = 9;
+  optional string host = 10;
+  optional string hostURL = 11;
+}
+
+
+/*
+ * see org.apache.slider.api.types.PingInformation
+ */
+message PingInformationProto {
+  optional string text = 1;
+  optional string verb = 2;
+  optional string body = 3;
+  optional int64 time = 4;
+}
+
+
+
+message GetModelRequestProto {
+}
+
+message GetModelDesiredRequestProto {
+}
+
+message GetModelDesiredAppconfRequestProto {
+}
+
+message GetModelDesiredResourcesRequestProto {
+}
+
+message GetModelResolvedAppconfRequestProto {
+}
+
+message GetModelResolvedResourcesRequestProto {
+}
+
+message GetModelLiveResourcesRequestProto {
+}
+
+message GetLiveContainersRequestProto {
+}
+
+message GetLiveContainersResponseProto {
+  repeated string names = 1;
+  repeated ContainerInformationProto containers = 2;
+}
+
+message GetLiveContainerRequestProto {
+  required string containerId = 1;
+}
+
+
+message GetLiveComponentsRequestProto {
+}
+
+message GetLiveComponentsResponseProto {
+
+  repeated string names = 1;
+  repeated ComponentInformationProto components = 2;
+}
+
+message GetLiveComponentRequestProto {
+  required string name = 1;
+}
+
+message GetApplicationLivenessRequestProto {
+}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/main/proto/SliderClusterProtocol.proto
----------------------------------------------------------------------
diff --git a/slider-core/src/main/proto/SliderClusterProtocol.proto 
b/slider-core/src/main/proto/SliderClusterProtocol.proto
index 2f5289d..da09f3c 100644
--- a/slider-core/src/main/proto/SliderClusterProtocol.proto
+++ b/slider-core/src/main/proto/SliderClusterProtocol.proto
@@ -16,25 +16,29 @@
  * limitations under the License.
  */
 
-/**
- * These .proto interfaces are private and stable.
- * Please see http://wiki.apache.org/hadoop/Compatibility
- * for what changes are allowed for a *stable* .proto interface.
- *
- * The generated java files are checked in to the Slider code base, so
- * if this file is changed, the java must be generated again with
- * mvn clean package -Pcompile-protobuf -DskipTests
- */
-
-// This file contains protocol buffers that are used throughout HDFS -- i.e.
-// by the client, server, and data transfer protocols.
-
 option java_package = "org.apache.slider.api.proto";
 option java_outer_classname = "SliderClusterAPI";
 option java_generic_services = true;
 option java_generate_equals_and_hash = true;
 package org.apache.slider.api;
 
+/*
+
+Compiling
+
+Maven: How to do it as part of the build
+ mvn -Pcompile-protobuf
+
+How to do it so as to get error messages
+
+protoc --java_out=src/main/java \
+ -Isrc/main/proto src/main/proto/SliderClusterMessages.proto \
+  src/main/proto/SliderClusterProtocol.proto
+
+Once happy: commit the changes
+
+*/
+
 //import "Security.proto";
 import "SliderClusterMessages.proto";
 
@@ -108,4 +112,29 @@ service SliderClusterProtocolPB {
    rpc amSuicide(AMSuicideRequestProto)
      returns(AMSuicideResponseProto);
 
+  /* ************************************************************************
+  
+  REST model and operations.
+  Below here the operations and payloads designed to mimic
+  the REST API. That API is now the source of those
+  specificatations; this is simply a derivative.
+  
+  **************************************************************************/
+
+  rpc getLivenessInformation(GetApplicationLivenessRequestProto) 
+    returns(ApplicationLivenessInformationProto);
+ 
+  rpc getLiveContainers(GetLiveContainersRequestProto) 
+    returns(GetLiveContainersResponseProto);
+
+  rpc getLiveContainer(GetLiveContainerRequestProto) 
+    returns(ContainerInformationProto);
+  
+  rpc getLiveComponents(GetLiveComponentsRequestProto) 
+    returns(GetLiveComponentsResponseProto);
+  
+  rpc getLiveComponent(GetLiveComponentRequestProto) 
+    returns(ComponentInformationProto);
+  
+  
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockSliderClusterProtocol.groovy
----------------------------------------------------------------------
diff --git 
a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockSliderClusterProtocol.groovy
 
b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockSliderClusterProtocol.groovy
deleted file mode 100644
index e02b5b5..0000000
--- 
a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/mock/MockSliderClusterProtocol.groovy
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * 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.slider.server.appmaster.model.mock
-
-import org.apache.hadoop.ipc.ProtocolSignature
-import org.apache.hadoop.yarn.exceptions.YarnException
-import org.apache.slider.api.SliderClusterProtocol
-import org.apache.slider.api.proto.Messages
-import org.apache.slider.api.proto.Messages.AMSuicideRequestProto
-import org.apache.slider.api.proto.Messages.AMSuicideResponseProto
-import org.apache.slider.api.proto.Messages.EchoRequestProto
-import org.apache.slider.api.proto.Messages.EchoResponseProto
-import org.apache.slider.api.proto.Messages.FlexClusterRequestProto
-import org.apache.slider.api.proto.Messages.FlexClusterResponseProto
-import org.apache.slider.api.proto.Messages.GetClusterNodesRequestProto
-import org.apache.slider.api.proto.Messages.GetClusterNodesResponseProto
-import org.apache.slider.api.proto.Messages.GetJSONClusterStatusRequestProto
-import org.apache.slider.api.proto.Messages.GetJSONClusterStatusResponseProto
-import org.apache.slider.api.proto.Messages.GetNodeRequestProto
-import org.apache.slider.api.proto.Messages.GetNodeResponseProto
-import org.apache.slider.api.proto.Messages.KillContainerRequestProto
-import org.apache.slider.api.proto.Messages.KillContainerResponseProto
-import org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleRequestProto
-import org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleResponseProto
-import org.apache.slider.api.proto.Messages.StopClusterRequestProto
-import org.apache.slider.api.proto.Messages.StopClusterResponseProto
-
-/**
- * 
- */
-class MockSliderClusterProtocol implements SliderClusterProtocol {
-
-  @Override
-  public long getProtocolVersion(String protocol, long clientVersion) throws 
IOException {
-    return 0;
-  }
-
-  @Override
-  public ProtocolSignature getProtocolSignature(String protocol, long 
clientVersion, int clientMethodsHash) throws IOException {
-    return null;
-  }
-
-  @Override
-  public StopClusterResponseProto stopCluster(StopClusterRequestProto request) 
throws IOException, YarnException {
-    return null;
-  }
-
-  @Override
-  public FlexClusterResponseProto flexCluster(FlexClusterRequestProto request) 
throws IOException, YarnException {
-    return null;
-  }
-
-  @Override
-  public GetJSONClusterStatusResponseProto 
getJSONClusterStatus(GetJSONClusterStatusRequestProto request) throws 
IOException, YarnException {
-    return null;
-  }
-
-  @Override
-  public ListNodeUUIDsByRoleResponseProto 
listNodeUUIDsByRole(ListNodeUUIDsByRoleRequestProto request) throws 
IOException, YarnException {
-    return null;
-  }
-
-  @Override
-  public GetNodeResponseProto getNode(GetNodeRequestProto request) throws 
IOException, YarnException {
-    return null;
-  }
-
-  @Override
-  public GetClusterNodesResponseProto 
getClusterNodes(GetClusterNodesRequestProto request) throws IOException, 
YarnException {
-    return null;
-  }
-
-  @Override
-  public EchoResponseProto echo(EchoRequestProto request) throws IOException, 
YarnException {
-    return null;
-  }
-
-  @Override
-  public KillContainerResponseProto killContainer(KillContainerRequestProto 
request) throws IOException, YarnException {
-    return null;
-  }
-
-  @Override
-  public AMSuicideResponseProto amSuicide(AMSuicideRequestProto request) 
throws IOException, YarnException {
-    return null;
-  }
-
-  @Override
-  Messages.GetInstanceDefinitionResponseProto getInstanceDefinition(
-      Messages.GetInstanceDefinitionRequestProto request)
-  throws IOException, YarnException {
-    return null
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestClusterSpecificationBlock.groovy
----------------------------------------------------------------------
diff --git 
a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestClusterSpecificationBlock.groovy
 
b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestClusterSpecificationBlock.groovy
index d6482a5..62ceca5 100644
--- 
a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestClusterSpecificationBlock.groovy
+++ 
b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestClusterSpecificationBlock.groovy
@@ -23,12 +23,10 @@ import groovy.transform.CompileStatic
 import groovy.util.logging.Slf4j
 import org.apache.hadoop.yarn.webapp.hamlet.Hamlet
 import org.apache.slider.api.ClusterDescription
-import org.apache.slider.api.SliderClusterProtocol
 import org.apache.slider.providers.ProviderService
 import org.apache.slider.server.appmaster.model.mock.MockAppState
 import org.apache.slider.server.appmaster.model.mock.MockProviderService
 import org.apache.slider.server.appmaster.model.mock.MockRecordFactory
-import org.apache.slider.server.appmaster.model.mock.MockSliderClusterProtocol
 import org.apache.slider.server.appmaster.state.AbstractRecordFactory
 import org.apache.slider.server.appmaster.state.AppState
 import org.apache.slider.server.appmaster.state.ProviderAppState
@@ -45,7 +43,6 @@ public class TestClusterSpecificationBlock {
 
   @Before
   public void setup() {
-    SliderClusterProtocol clusterProto = new MockSliderClusterProtocol();
     AppState appState = new MyAppState(new MockRecordFactory());
     ProviderAppState providerAppState = new ProviderAppState(
         "undefined",

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy
----------------------------------------------------------------------
diff --git 
a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy
 
b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy
index f3283c4..16bf23b 100644
--- 
a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy
+++ 
b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy
@@ -53,7 +53,6 @@ public class TestContainerStatsBlock extends 
BaseMockAppStateTest {
 
   @Before
   public void setup() {
-    SliderClusterProtocol clusterProto = new MockSliderClusterProtocol();
     ProviderService providerService = new MockProviderService();
     ProviderAppState providerAppState = new ProviderAppState(
         "undefined",

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/bc15807c/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy
----------------------------------------------------------------------
diff --git 
a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy
 
b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy
index 4b91ca0..eb68c8a 100644
--- 
a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy
+++ 
b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy
@@ -45,7 +45,6 @@ public class TestIndexBlock extends BaseMockAppStateTest {
   public void setup() {
     super.setup()
     assert appState
-    SliderClusterProtocol clusterProto = new MockSliderClusterProtocol();
     ProviderService providerService = new MockProviderService();
     ProviderAppState providerAppState = new ProviderAppState(
         "undefined",

Reply via email to