Created
March 21, 2012 00:11
-
-
Save skierkowski/2142852 to your computer and use it in GitHub Desktop.
Cloud Foundry API wrapper built in Javascript for Titanium Framework
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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