Comparing version 0.6.9-63 to 0.6.9-66
@@ -18,4 +18,5 @@ exports.login = require('./lib/login.js'); | ||
exports.account = require('./lib/account.js'); | ||
exports.endpoints = require('./lib/endpoints.js'); | ||
exports.cloudfoundry = require('./lib/cloudfoundry.js'); | ||
module.exports = act; | ||
act.usage = "\nfhc act <app-id> <server-function> <params>"; | ||
act.usage = "\nfhc act <app-id> <server-function> <params> [--live]"; | ||
@@ -12,2 +12,4 @@ var log = require("./utils/log"); | ||
var util = require('util'); | ||
var ini = require('./utils/ini'); | ||
var request = require('request'); | ||
@@ -18,8 +20,23 @@ // main act entry point | ||
var target = ini.get('live') ? 'live' : 'development'; | ||
// tmp hack for using as a script, check if the last arg is trying to override target | ||
if (args[args.length -1] === 'live' || args[args.length -1] === 'development') { | ||
target = args[args.length -1]; | ||
args.pop(); | ||
} | ||
var appId = fhc.appId(args[0]); | ||
var funct = args[1]; | ||
var data = {}; | ||
var data = args[2] ? JSON.parse(args[2]): {}; | ||
log.silly(data, "act params"); | ||
if (args[2]) data = JSON.parse(args[2]); | ||
log.silly(data, "params"); | ||
if ("live" === target) { | ||
doLiveAct(appId, funct, data, cb); | ||
}else { | ||
doMillicoreAct(appId, funct, data, cb); | ||
} | ||
}; | ||
// TODO - full development proxy (no proxy through millicore) | ||
function doMillicoreAct(appId, funct, data, cb) { | ||
millicore.widgForAppId(appId, function (err, widgId) { | ||
@@ -37,2 +54,14 @@ if(err) return cb(err); | ||
}); | ||
} | ||
// Do our live action | ||
// TODO - cache the endpoint lookup (so we don't have to call every time) | ||
function doLiveAct(appId, funct, data, cb) { | ||
common.getAppNameUrl(appId, 'live', function(err, appName, appUrl) { | ||
// post to /cloud | ||
request({uri: appUrl + "/cloud/" + funct, method: 'POST', json: data}, function (err, response, body) { | ||
log.silly(response, "act response"); | ||
return cb(common.nullToUndefined(err), body); | ||
}); | ||
}); | ||
}; | ||
@@ -39,0 +68,0 @@ |
module.exports = cf; | ||
cf.usage = "\nfhc cf act <app-id> <server-function> <params>" | ||
+ "\nfhc cf apps" | ||
+ "\nfhc cf app <app-id>"; | ||
+ "\nfhc cf url <app-id>"; | ||
cf.usage = "\nfhc cf apps" | ||
+ "\nfhc cf app <app-name>"; | ||
var log = require("./utils/log"); | ||
@@ -13,3 +11,2 @@ var fhc = require("./fhc"); | ||
var util = require('util'); | ||
var fhcluster, cftarget, cfuser, cfpwd; | ||
var vmcjs = require('vmcjs'); | ||
@@ -25,12 +22,4 @@ var common = require('./common.js'); | ||
if (args.length != 1) return unknown("app", cb); | ||
else return app(fhc.appId(args[0]), cb); | ||
else return app(args[0], cb); | ||
}; | ||
case "act": { | ||
if (args.length < 2) return unknown("act", cb); | ||
return act(fhc.appId(args[0]), args[1], args[2], cb); | ||
}; | ||
case "url": { | ||
if (args.length != 1) return unknown("url", cb); | ||
else return url(fhc.appId(args[0]), cb); | ||
}; | ||
default: return unknown(action, cb); | ||
@@ -46,37 +35,2 @@ } | ||
// gets the app endpoint from the dftarget | ||
function getAppUrl(appId){ | ||
var appName = common.getAppName(appId); | ||
var cftarget = fhc.config.get("cftarget"); | ||
return cftarget.replace('api', appName); | ||
}; | ||
// do our act call | ||
function act(appId, funct, params, cb) { | ||
var data = {}; | ||
if (params) data = JSON.parse(params); | ||
log.silly(data, "cf act params"); | ||
// replace 'api' with the modified appId to get our endpoint | ||
var appUrl = getAppUrl(appId); | ||
log.verbose('' + appUrl, "CloudFoundry App endpoint"); | ||
log.verbose('' + funct, "Function"); | ||
// post to /cloud | ||
fhreq.POST(appUrl, 'cloud/' + funct, data, function (err, remoteData, raw, response) { | ||
if (err) { | ||
log.error(err, "Error in cf act"); | ||
log.verbose(remoteData, "list"); | ||
} | ||
return cb(err, remoteData); | ||
}); | ||
}; | ||
// given an app id, returns its DynoFarm endpoint | ||
function url(appId, cb) { | ||
var appName = common.getAppName(appId); | ||
var url = getAppUrl(appId); | ||
return cb(undefined, {name: appName, url:url}); | ||
}; | ||
// get our CloudFoundry apps | ||
@@ -99,4 +53,3 @@ function apps(cb) { | ||
// get CF info for a single app | ||
function app(appId, cb) { | ||
var appName = common.getAppName(appId).toLowerCase(); | ||
function app(appName, cb) { | ||
log.verbose(appName, "AppName"); | ||
@@ -122,3 +75,3 @@ | ||
if (argv.length === 2) { | ||
var cmds = ["act", "apps", "app", "url"]; | ||
var cmds = ["act", "apps", "app"]; | ||
return cb(null, cmds); | ||
@@ -133,3 +86,2 @@ } | ||
case "app": | ||
case "url": | ||
return cb(null, Object.keys(types)); | ||
@@ -136,0 +88,0 @@ default: return cb(null, []); |
@@ -11,3 +11,2 @@ // Misc common functions.. | ||
// Common API call to FeedHenry | ||
@@ -72,16 +71,10 @@ exports.doApiCall = function(host, uri, payload, errorMsg, cb) { | ||
// gets our app name (as it will be when staged) | ||
exports.getAppName = function(appId){ | ||
var fhcluster = fhc.config.get("fhcluster"); | ||
// | ||
// Note: we replace _ and - with 0's | ||
// | ||
var app = appId.replace(/_/g, '0'); | ||
app = app.replace(/-/g, '0'); | ||
log.silly(fhcluster, 'fh cluster'); | ||
log.silly(appId, 'cf appId'); | ||
var appName = fhcluster + "-" + app; | ||
return appName.toLowerCase(); | ||
// gets our app name via 'endpoints' api | ||
exports.getAppNameUrl = function(appId, env, cb){ | ||
exports.doApiCall(fhreq.getFeedHenryUrl(), "box/srv/1.1/ide/" + fhc.domain + "/app/endpoints", {payload: {guid: appId}}, "", function(err, data){ | ||
if(err) return cb(err); | ||
log.verbose(data, "endpoints"); | ||
return cb(undefined, data.endpoints[env + '-name'], data.endpoints[env + '-url']); | ||
}); | ||
}; | ||
@@ -261,2 +254,8 @@ | ||
// Annoyingly, 'request' returns nulls, the rest of FHC uses undefined, so return undefined to keep | ||
// things consistent. | ||
exports.nullToUndefined = function(err) { | ||
return err == null? undefined: err; | ||
}; | ||
exports.createNVTable = createNVTable; | ||
@@ -263,0 +262,0 @@ exports.createObjectTable = createObjectTable; |
111
lib/df.js
@@ -9,8 +9,6 @@ module.exports = df; | ||
+ "\nfhc df apps" | ||
+ "\nfhc df logs <app-id>" | ||
+ "\nfhc df start <app-id>" | ||
+ "\nfhc df stop <app-id>" | ||
+ "\nfhc df delete <app-id>" | ||
+ "\nfhc df act <app-id> <server-function> <params>" | ||
+ "\nfhc df url <app-id> (returns the full DynoFarm url given an appId)"; | ||
+ "\nfhc df logs <app-name>" | ||
+ "\nfhc df start <app-name>" | ||
+ "\nfhc df stop <app-name>" | ||
+ "\nfhc df delete <app-name>"; | ||
@@ -29,2 +27,3 @@ var log = require("./utils/log"); | ||
// main DynoFarm entry point | ||
// note app-name here is the DF app name, not the Millicore guid (i.e. we talk directly to DF) | ||
function df (args, cb) { | ||
@@ -38,27 +37,18 @@ var action = args.shift(); | ||
if (args.length != 1) return unknown("logs", cb); | ||
else return logs(fhc.appId(args[0]), cb); | ||
else return logs(args[0], cb); | ||
}; | ||
case "stop": { | ||
if (args.length != 1) return unknown("stop", cb); | ||
else return stop(fhc.appId(args[0]), cb); | ||
else return stop(args[0], cb); | ||
}; | ||
case "start": { | ||
if (args.length != 1) return unknown("start", cb); | ||
else return start(fhc.appId(args[0]), cb); | ||
else return start(args[0], cb); | ||
}; | ||
case "restart": { | ||
if (args.length != 1) return unknown("restart", cb); | ||
else return restart(fhc.appId(args[0]), cb); | ||
else return restart(args[0], cb); | ||
}; | ||
case "url": { | ||
if (args.length != 1) return unknown("url", cb); | ||
else return url(fhc.appId(args[0]), cb); | ||
}; | ||
case "act": { | ||
if (args.length < 2) return unknown("act", cb); | ||
return act(fhc.appId(args[0]), args[1], args[2], cb); | ||
}; | ||
case "delete": { | ||
if (args.length < 1) return unknown("delete", cb); | ||
//todo make work with alias | ||
else return deleteApps(args, cb); | ||
@@ -70,38 +60,6 @@ }; | ||
// gets the app endpoint from the dftarget | ||
function getAppUrl(appId){ | ||
var appName = common.getAppName(appId); | ||
var df = fhc.config.get("dynofarm"); | ||
var uri = require('url').parse(df); | ||
// replace 'api' with the modified appId to get our enpoint | ||
var port = uri.port ? ":" + uri.port : ""; | ||
var url = uri.protocol + "//" + appName + "." + uri.hostname + port; | ||
url = url.replace(/\.api\./g, '.'); | ||
return url; | ||
} | ||
// our 'act' function | ||
function act(appId, funct, params, cb) { | ||
var data = {}; | ||
if (params) data = JSON.parse(params); | ||
log.silly(data, "df act params"); | ||
// firgure out our app endpoint | ||
var appUrl = getAppUrl(appId); | ||
log.verbose('' + appUrl, "App endpoint"); | ||
log.verbose('' + funct, "Calling DF function"); | ||
// post to /cloud | ||
request({uri: appUrl + "/cloud/" + funct, method: 'POST', json: data}, function (err, response, body) { | ||
log.silly(response); | ||
return cb(nullToUndefined(err), body); | ||
}); | ||
}; | ||
// ping | ||
function pingVersion (pingVersion, cb) { | ||
request(getDynoFarmUrl() + "sys/info/" + pingVersion, function (err, response, body) { | ||
return cb(nullToUndefined(err), body); | ||
return cb(common.nullToUndefined(err), body); | ||
}); | ||
@@ -143,3 +101,3 @@ }; | ||
request(getDynoFarmUrl() + "apps", function (err, response, body) { | ||
if (err) return cb(nullToUndefined(err)); | ||
if (err) return cb(common.nullToUndefined(err)); | ||
var apps; | ||
@@ -161,5 +119,5 @@ try{ | ||
// DynoFarm logs | ||
function logs(appId, cb) { | ||
request(getDynoFarmUrl() + "logs/" + appId, function (err, response, body) { | ||
return cb(nullToUndefined(err), body); | ||
function logs(appName, cb) { | ||
request(getDynoFarmUrl() + "logs/" + appName, function (err, response, body) { | ||
return cb(common.nullToUndefined(err), body); | ||
}); | ||
@@ -169,5 +127,5 @@ }; | ||
// Stop app | ||
function stop(appId, cb) { | ||
request(getDynoFarmUrl() + "stop/" + appId, function (err, response, body) { | ||
return cb(nullToUndefined(err), body); | ||
function stop(appName, cb) { | ||
request(getDynoFarmUrl() + "stop/" + appName, function (err, response, body) { | ||
return cb(common.nullToUndefined(err), body); | ||
}); | ||
@@ -177,4 +135,4 @@ }; | ||
// Start app | ||
function start(appId, cb) { | ||
request(getDynoFarmUrl() + "start/" + appId, function (err, response, body) { | ||
function start(appName, cb) { | ||
request(getDynoFarmUrl() + "start/" + appName, function (err, response, body) { | ||
if(err) return cb(err); | ||
@@ -194,3 +152,3 @@ | ||
return cb(nullToUndefined(err), app); | ||
return cb(common.nullToUndefined(err), app); | ||
}); | ||
@@ -200,4 +158,4 @@ }; | ||
// Restart app | ||
function restart(appId, cb) { | ||
request(getDynoFarmUrl() + "restart/" + appId, function (err, response, body) { | ||
function restart(appName, cb) { | ||
request(getDynoFarmUrl() + "restart/" + appName, function (err, response, body) { | ||
if(err) return cb(err); | ||
@@ -216,13 +174,6 @@ if(response.statusCode !== 200) return cb("Bad response: " + response.statusCode + " " + body); | ||
return cb(nullToUndefined(err), app); | ||
return cb(common.nullToUndefined(err), app); | ||
}); | ||
}; | ||
// Given an app id, returns its DynoFarm endpoint | ||
function url(appId, cb) { | ||
var appName = common.getAppName(appId); | ||
var url = getAppUrl(appId); | ||
return cb(undefined, {name: appName, url:url}); | ||
}; | ||
function unknown (action, cb) { | ||
@@ -245,12 +196,6 @@ var msg = action ? "Wrong arguments for or unknown action: " + action + "\n" : ""; | ||
// Annoyingly, 'request' returns nulls, the rest of FHC uses undefined, so return undefined to keep | ||
// things consistent. | ||
function nullToUndefined(err) { | ||
return err == null? undefined: err; | ||
} | ||
// delete an app | ||
function deleteApp(appId, cb) { | ||
request({url: getDynoFarmUrl() + "delete/" + appId, method: 'POST'}, function (err, response, body) { | ||
return cb(nullToUndefined(err), body); | ||
function deleteApp(appName, cb) { | ||
request({url: getDynoFarmUrl() + "delete/" + appName, method: 'POST'}, function (err, response, body) { | ||
return cb(common.nullToUndefined(err), body); | ||
}); | ||
@@ -268,3 +213,3 @@ }; | ||
if (argv.length === 2) { | ||
var cmds = ["apps", "logs", "start", "stop", "delete", "act", "url", "version"]; | ||
var cmds = ["apps", "logs", "start", "stop", "delete", , "version"]; | ||
return cb(null, cmds); | ||
@@ -280,4 +225,2 @@ } | ||
case "delete": | ||
case "act": | ||
case "url": | ||
case "version": | ||
@@ -284,0 +227,0 @@ return cb(null, Object.keys(types)); |
@@ -98,2 +98,3 @@ process.title = "fhc"; | ||
,'df' | ||
,'endpoints' | ||
@@ -100,0 +101,0 @@ ] |
@@ -49,3 +49,2 @@ // defaults, types, and shorthands. | ||
, cfpwd: "" | ||
, fhcluster: "" | ||
, editor : process.env.EDITOR || "vi" | ||
@@ -100,3 +99,2 @@ , global : false | ||
, cfpwd : String | ||
, fhcluster : String | ||
, editor : path | ||
@@ -103,0 +101,0 @@ , global : Boolean |
@@ -5,3 +5,3 @@ { | ||
"keywords" : [ "cli", "feedhenry" ], | ||
"version": "0.6.9-63", | ||
"version": "0.6.9-66", | ||
"preferGlobal" : true, | ||
@@ -8,0 +8,0 @@ "homepage" : "http://git.io/fh-fhc", |
@@ -1,1 +0,1 @@ | ||
0.6.9-63 | ||
0.6.9-66 |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
90
223461
5933