ambari-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tom Beerbower (JIRA)" <j...@apache.org>
Subject [jira] [Created] (AMBARI-4517) Allow for external resources in Ambari Views
Date Tue, 04 Feb 2014 11:54:09 GMT
Tom Beerbower created AMBARI-4517:
-------------------------------------

             Summary: Allow for external resources in Ambari Views
                 Key: AMBARI-4517
                 URL: https://issues.apache.org/jira/browse/AMBARI-4517
             Project: Ambari
          Issue Type: Task
            Reporter: Tom Beerbower
            Assignee: Tom Beerbower


Currently a view developer can specify resources for a view.  The resource plugs into the
Ambari API framework and is exposed through a user defined service and resource adapter.
For example ...
{code}
    <resource>
        <name>file</name>
        <plural-name>files</plural-name>
        <id-property>id</id-property>
        <resource-class>org.apache.ambari.view.explorer.FileResource</resource-class>
        <provider-class>org.apache.ambari.view.explorer.FileResourceProvider</provider-class>
        <service-class>org.apache.ambari.view.explorer.FileService</service-class>
    </resource>
{code}

The resources will be available through an instance of the view in the API.  In this case
the files resources are listed under 'files' in the API response.  Navigating to an individual
resource under files will go through the framework's resource provider to satisfy the request
for a file resource ...

{code}
{
  "href" : "http://c6401.ambari.apache.org:8080/api/v1/views/JAR_EXPLORER/instances/EXPLORER_JAR",
  "ViewInstanceInfo" : {
    "instance_name" : "EXPLORER_JAR",
    "view_name" : "JAR_EXPLORER",
    "properties" : {
      "path" : "/vagrant/jar-explorer-view-0.9.0.jar"
    },
    "servlet_mappings" : {
      "ExplorerServlet" : "/views/JAR_EXPLORER/EXPLORER_JAR/ui"
    }
  },
  "files" : [
    {
      "href" : "http://c6401.ambari.apache.org:8080/api/v1/views/JAR_EXPLORER/instances/EXPLORER_JAR/files/META-INF_MANIFEST.MF",
      "id" : "META-INF_MANIFEST.MF",
      "instance_name" : "EXPLORER_JAR",
      "view_name" : "JAR_EXPLORER"
    },
    {
      "href" : "http://c6401.ambari.apache.org:8080/api/v1/views/JAR_EXPLORER/instances/EXPLORER_JAR/files/META-INF_maven_org.apache.ambari_jar-explorer-view_pom.properties",
      "id" : "META-INF_maven_org.apache.ambari_jar-explorer-view_pom.properties",
      "instance_name" : "EXPLORER_JAR",
      "view_name" : "JAR_EXPLORER"
    },
...
{code}


There are cases where the view developer may want to expose a resource more directly through
the service and bypass the framework and resource adapter.  

For example ...

{code}
    <resource>
        <name>proxy</name>
        <service-class>org.apache.ambari.view.proxy.ProxyAPIService</service-class>
    </resource>
{code}

In this case there is no resource provider.  The service definition is free to handle the
request any way it pleases.  These external (outside of the framework) resources will still
be linked to from the view API but will be serviced entirely by the defined service ...

{code}
{
  "href" : "http://c6401.ambari.apache.org:8080/api/v1/views/PROXY_API/instances/HW_DEFAULT_URL",
  "ViewInstanceInfo" : {
    "instance_name" : "HW_DEFAULT_URL",
    "view_name" : "PROXY_API",
    "properties" : {
      "defaultURL" : "http://hortonworks.com/"
    },
    "servlet_mappings" : { }
  },
  "resources" : [
    {
      "href" : "http://c6401.ambari.apache.org:8080/api/v1/views/PROXY_API/instances/HW_DEFAULT_URL/resources/proxy",
      "instance_name" : "HW_DEFAULT_URL",
      "name" : "proxy",
      "view_name" : "PROXY_API"
    }
  ]
}
{code}

The endpoint '/resources/proxy' will be serviced by the defined service (ProxyAPIService in
this example) ...

{code}
public class ProxyAPIService {
  @Inject
  ViewContext context;

...

  @GET
  @Produces({"text/plain", "application/json"})
  public Response getResources(@Context HttpHeaders headers, @Context UriInfo ui) throws IOException{
    // Handle the request 
    ...
    return Response.ok(...).build();
  }
{code}





--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Mime
View raw message