Skip to content

Instantly share code, notes, and snippets.

@skierkowski
Created March 21, 2012 00:11
Show Gist options
  • Save skierkowski/2142852 to your computer and use it in GitHub Desktop.
Save skierkowski/2142852 to your computer and use it in GitHub Desktop.
Cloud Foundry API wrapper built in Javascript for Titanium Framework
function CloudFoundryClient(token,new_target)
{
var vmc_version="0.3.2";
var vmc_default_target="http://api.aws.af.cm";
var vmc_info_path="/info";
var vmc_global_services_path="/info/services";
var vmc_global_runtimes_path="/info/runtimes";
var vmc_resources_path="/resources";
var vmc_apps_path="/apps";
var vmc_services_path="/services";
var vmc_users_path="/users";
var token=token;
var target=new_target==null ? vmc_default_target : new_target;
var getJson = function(payload)
{
return eval('(' + payload + ')');
}
var rest_call = function(method,url,payload)
{
var headers=Array();
headers["content-type"]="application/json";
if(token!=null)headers["AUTHORIZATION"]=token;
return http_call(method,url,payload,headers);
}
var http_call = function(method,url,payload,headers)
{
var request = Titanium.Network.createHTTPClient({enableKeepAlive:false});
request.setTimeout(20000);
request.open(method,url);
if(headers!=null)
{
for(var key in headers)
{
var value=headers[key]
request.setRequestHeader(key,value);
Ti.API.debug("header: " + key + "=" + value)
}
}
if(payload!=null)
{
var requestBody = JSON.stringify(payload);
Ti.API.debug("body: " + requestBody);
request.send(requestBody);
}
else
{
request.send();
}
return request;
}
var make_call = function(method,url,contents,callback,error_callback)
{
var request = rest_call(method,target + url, contents,token);
request.onload = function()
{
var response=getJson(request.responseText);
Ti.API.debug(response);
if(response["code"]==null)
{
callback(response);
}
else
{
Ti.API.error(response);
error_callback(response);
}
}
request.onerror = function(error)
{
Ti.API.error(error);
error_callback(error);
}
}
this.login = function(user,password,target,callback,error_callback)
{
this.token=null;
this.set_target(target);
make_call("POST",vmc_users_path+"/"+encodeURIComponent(user)+"/tokens",{password:password},function(response){
token = response["token"];
callback();
},error_callback);
}
/*
* System
*/
this.get_version = function()
{
return vmc_version;
}
this.get_token = function()
{
return token;
}
this.get_target = function()
{
return target;
}
this.set_target = function(new_target)
{
if(new_target!=null) target=new_target;
}
/*
* Target Info
*/
this.get_info = function(callback,error_callback)
{
make_call("GET",vmc_info_path,null,callback,error_callback);
}
this.get_services_info = function(callback,error_callback)
{
make_call("GET",vmc_glabal_services_path,null,callback,error_callback);
}
this.get_runtimes_info = function(callback,error_callback)
{
make_call("GET",vmc_glabal_runtimes_path,null,callback,error_callback);
}
/*
* Apps
*/
this.get_apps = function(callback,error_callback)
{
make_call("GET",vmc_apps_path,null,callback,error_callback);
}
this.create_app = function(name,manifest,callback,error_callback)
{
manifest["name"]=name;
manifest["instances"]=1;
make_call("POST",vmc_apps_path,manifest,callback,error_callback);
}
this.update_app = function(name,manfiest,callback,error_callback)
{
make_call("PUT",vmc_apps_path + "/" + name,manifest,callback,error_callback);
}
this.delete_app = function(name,manfiest,callback,error_callback)
{
make_call("DELETE",vmc_apps_path + "/" + name,null,callback,error_callback);
}
this.get_app_info = function(app_name,callback,error_callback)
{
make_call("GET",vmc_apps_path + "/" + app_name,null,callback,error_callback);
}
this.get_app_update_info = function(name,callback,error_callback)
{
make_call("PUT",vmc_apps_path + "/" + name + "/update",null,callback,error_callback);
}
this.get_app_stats = function(name,callback,error_callback)
{
make_call("GET",vmc_apps_path + "/" + name + "/stats",null,callback,error_callback);
}
this.get_app_instances = function(name,callback,error_callback)
{
make_call("GET",vmc_apps_path + "/" + name + "/instances",null,callback,error_callback);
}
this.get_app_crashes = function(name,callback,error_callback)
{
make_call("GET",vmc_apps_path + "/" + name + "/crashes" ,null,callback,error_callback);
}
this.get_app_files = function(name,path,instance,callback,error_callback)
{
if(instances==null)instances=0;
make_call("GET",vmc_apps_path + "/" + name + "/instances/" + instance + "/files/" + path,null,callback,error_callback);
}
/*
* Services
*/
this.get_services = function(callback,error_callback)
{
make_call("GET",vmc_services_path,null,callback,error_callback);
}
/*
* TODO: the following code hasn't been reviewed or tested. There are more capabilities in the API which are not present here.
*/
/*
this.bind_service = function(service,app_name,callback,error_callback)
{
var app=this.app_info(app_name);
var services = app["services"];
app["services"].push(service);
this.update_app(app_name,app,callback,error_callback);
}
this.unbind_service = function(service,app_name,callback)
{
var app=this.app_info(app_name);
var services = app["services"];
services.delete(service);
app["services"]=services;
this.update_app(app_name,app,callback);
}*/
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment