diff --git a/.gitignore b/.gitignore index edaacf371..b60a99736 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ .DS_Store *.iml .idea/* +*.swp # npm node_modules/ diff --git a/src/js/plugin/PluginLoader.js b/src/js/plugin/PluginLoader.js index 6906dc850..ff2b3a0e4 100644 --- a/src/js/plugin/PluginLoader.js +++ b/src/js/plugin/PluginLoader.js @@ -1,6 +1,7 @@ import React from "react/addons"; import config from "../config/config"; +import ajaxWrapper from "../helpers/ajaxWrapper"; import URLUtil from "../helpers/URLUtil"; import PluginDispatcher from "./shared/PluginDispatcher"; @@ -10,6 +11,8 @@ import PluginActions from "./shared/PluginActions"; import PluginHelper from "./shared/PluginHelper"; import PluginDispatcherProxy from "./PluginDispatcherProxy"; +import PluginAPI from "./sdk/PluginAPI"; + const PLUGIN_STARTUP_TIMEOUT = 10000; // in ms const PluginLoader = { @@ -45,7 +48,8 @@ const PluginLoader = { PluginMountPoints: PluginMountPoints, pluginId: pluginId, React: React, - UIVersion: config.version + config: Object.freeze(config), + PluginAPI: PluginAPI }); let dispatchToken = PluginDispatcher.register(function (event) { diff --git a/src/js/plugin/sdk/PluginAPI.js b/src/js/plugin/sdk/PluginAPI.js new file mode 100644 index 000000000..0ea758ea0 --- /dev/null +++ b/src/js/plugin/sdk/PluginAPI.js @@ -0,0 +1,13 @@ + +import MarathonService from "./services/MarathonService"; +import MarathonActions from "./actions/MarathonActions"; + +const version = "0.0.1"; + +var PluginAPI = { + version: version, + MarathonService: MarathonService, + MarathonActions: MarathonActions +}; + +export default Object.freeze(PluginAPI); diff --git a/src/js/plugin/sdk/actions/MarathonActions.js b/src/js/plugin/sdk/actions/MarathonActions.js new file mode 100644 index 000000000..8047ef03b --- /dev/null +++ b/src/js/plugin/sdk/actions/MarathonActions.js @@ -0,0 +1,29 @@ +import MarathonService from "../services/MarathonService"; +import Utils from "../utils"; + +export default class MarathonActions { + + static getDeployments() { + return MarathonService.request({ + resource: "/v2/deployments" + }); + } + + static getGroup(group) { + let groupName = Utils.addLeadingSlashIfNedded(group); + return MarathonService.request({ + resource: `/v2/groups${groupName}` + }); + } + + static getGroups() { + return this.getGroup("/"); + } + + static getApp(appId) { + return MarathonService.request({ + resource: `/v2/apps${appId}` + }); + } + +}; diff --git a/src/js/plugin/sdk/services/MarathonService.js b/src/js/plugin/sdk/services/MarathonService.js new file mode 100644 index 000000000..00b609616 --- /dev/null +++ b/src/js/plugin/sdk/services/MarathonService.js @@ -0,0 +1,23 @@ + +import config from "../../../config/config"; +import ajaxWrapper from "../../../helpers/ajaxWrapper"; +import Utils from "../utils"; + +export default class MarathonService { + + static request(opts = {}) { + let method = "GET"; + let resource = Utils.addLeadingSlashIfNedded(opts.resource); + + if (opts.method) { + method = opts.method; + } + + return ajaxWrapper({ + url: `${config.apiURL}${resource}`, + method: method, + data: opts.data + }); + } + +}; diff --git a/src/js/plugin/sdk/utils.js b/src/js/plugin/sdk/utils.js new file mode 100644 index 000000000..5d42bdc9a --- /dev/null +++ b/src/js/plugin/sdk/utils.js @@ -0,0 +1,11 @@ + +export default class Utils { + + static addLeadingSlashIfNedded(value) { + if (value && value[0] !== "/") { + return "/" + value; + } + return value; + }; + +};