The Calculator view is another simple view example. Like the HelloWorld view example, it demonstrates the basics of how to write and deploy a view in Ambari but also includes a simple resource. The Calculator resource uses JAX-RS annotations to define the actions that can be performed on the resource.
All views are packaged as a view archive. The view archive contains the configuration file and various optional components of the view.
#####view.xml
The view.xml file is the only required file for a view archive. The view.xml is the configuration that describes the view and view instances for Ambari.
<view>
<name>CALCULATOR</name>
<label>The Calculator View</label>
<version>1.0.0</version>
<resource>
<name>calculator</name>
<service-class>org.apache.ambari.view.proxy.CalculatorResource</service-class>
</resource>
<instance>
<name>INSTANCE_1</name>
</instance>
</view>
The configuration in this case defines a view named CALCULATOR that has a single instance. The view also defines a resource named 'calculator'.
#####CalculatorResource.java
The CalculatorResource class defines the calculator resource for the view. It uses JAX-RS annotations to define the actions that can be performed on the resource.
@GET
@Path("/add/{a}/{b}")
@Produces({"text/html"})
public Response add(@PathParam("a") double a, @PathParam("b") double b) {
String result = a + " + " + b + " = " + (a + b);
return Response.ok("<b>" + result + "</b>").type("text/html").build();
}
The add method will service requests to 'calculator/add/{a}/{b}' for INSTANCE_1 of the CALCULATOR view.
For example ...
http://<server>:8080/api/v1/views/CALCULATOR/instances/INSTANCE_1/resources/calculator/add/77.5/87.62
The view can be built as a maven project.
cd ambari-views/examples/calculator-view
mvn clean package
The build will produce the view archive.
ambari-views/examples/calculator-view/target/calculator-view-1.0.0.jar
To deploy a view we simply place the view archive in the views folder of the ambari-server machine. By default the views folder is located at ...
/var/lib/ambari-server/resources/views
To deploy the Calculator view simply copy the calculator-view jar to the ambari-server views folder and restart the ambari server.
After deploying a view you should see it as a view resource in the Ambari REST API. If we request all views, we should see the CALCULATOR view.
{
"href" : "http://<server>:8080/api/v1/views",
"items" : [
{
"href" : "http://<server>:8080/api/v1/views/CALCULATOR",
"ViewInfo" : {
"view_name" : "CALCULATOR"
}
},
{
"href" : "http://<server>:8080/api/v1/views/HELLO_SERVLET",
"ViewInfo" : {
"view_name" : "HELLO_SERVLET"
}
},
{
"href" : "http://<server>:8080/api/v1/views/HELLO_WORLD",
"ViewInfo" : {
"view_name" : "HELLO_WORLD"
}
}
]
}
If we want to see the details about a specific view, we can ask for it by name. This shows us that the CALCULATOR view has a single instance named INSTANCE_1.
http://<server>:8080/api/v1/views/CALCULATOR/versions/1.0.0
{
"href" : "http://<server>:8080/api/v1/views/CALCULATOR/versions/1.0.0",
"ViewVersionInfo" : {
"archive" : "/var/lib/ambari-server/resources/views/work/CALCULATOR{1.0.0}",
"label" : "The Calculator View",
"parameters" : [ ],
"version" : "1.0.0",
"view_name" : "CALCULATOR"
},
"instances" : [
{
"href" : "http://<server>:8080/api/v1/views/CALCULATOR/versions/1.0.0/instances/INSTANCE_1",
"ViewInstanceInfo" : {
"instance_name" : "INSTANCE_1",
"version" : "1.0.0",
"view_name" : "CALCULATOR"
}
}
]
}
To see a specific instance of a view, we can ask for it by name. Here we can see the attributes of the view instance. We can also see that this view has a resource name 'calculator'.
http://<server>:8080/api/v1/views/CALCULATOR/versions/1.0.0/instances/INSTANCE_1
{
"href" : "http://<server>:8080/api/v1/views/CALCULATOR/versions/1.0.0/instances/INSTANCE_1",
"ViewInstanceInfo" : {
"context_path" : "/views/CALCULATOR/1.0.0/INSTANCE_1",
"instance_name" : "INSTANCE_1",
"version" : "1.0.0",
"view_name" : "CALCULATOR",
"instance_data" : { },
"properties" : { }
},
"resources" : [
{
"href" : "http://<server>:8080/api/v1/views/CALCULATOR/versions/1.0.0/instances/INSTANCE_1/resources/calculator",
"instance_name" : "INSTANCE_1",
"name" : "calculator",
"version" : "1.0.0",
"view_name" : "CALCULATOR"
}
]
}
We can access the view's resource through the resource's href.
http://<server>:8080/api/v1/views/CALCULATOR/versions/1.0.0/instances/INSTANCE_1/resources/calculator/
We can access the add method of the resource with the following …
http://<server>:8080/api/v1/views/CALCULATOR/versions/1.0.0/instances/INSTANCE_1/resources/calculator/add/77.5/87.62