All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.heroku.api.HerokuAPI Maven / Gradle / Ivy

package com.heroku.api;


import com.heroku.api.connection.Connection;
import com.heroku.api.connection.ConnectionFactory;
import com.heroku.api.request.addon.AddonInstall;
import com.heroku.api.request.addon.AddonList;
import com.heroku.api.request.addon.AddonRemove;
import com.heroku.api.request.addon.AppAddonsList;
import com.heroku.api.request.app.*;
import com.heroku.api.request.config.ConfigAdd;
import com.heroku.api.request.config.ConfigList;
import com.heroku.api.request.config.ConfigRemove;
import com.heroku.api.request.key.KeyAdd;
import com.heroku.api.request.key.KeyList;
import com.heroku.api.request.key.KeyRemove;
import com.heroku.api.request.log.Log;
import com.heroku.api.request.log.LogStreamResponse;
import com.heroku.api.request.ps.ProcessList;
import com.heroku.api.request.ps.Restart;
import com.heroku.api.request.ps.Scale;
import com.heroku.api.request.releases.ListReleases;
import com.heroku.api.request.releases.ReleaseInfo;
import com.heroku.api.request.releases.Rollback;
import com.heroku.api.request.run.Run;
import com.heroku.api.request.run.RunResponse;
import com.heroku.api.request.sharing.CollabList;
import com.heroku.api.request.sharing.SharingAdd;
import com.heroku.api.request.sharing.SharingRemove;
import com.heroku.api.request.sharing.SharingTransfer;

import java.util.List;
import java.util.Map;

public class HerokuAPI {

    final Connection connection;

    public static String obtainApiKey(String username, String password) {
        return ConnectionFactory.get(username, password).getApiKey();
    }

    public HerokuAPI(String apiKey) {
        this(ConnectionFactory.get(apiKey));
    }

    public HerokuAPI(Connection connection) {
        this.connection = connection;
    }

    public Connection getConnection() {
        return connection;
    }

    public String getApiKey() {
        return connection.getApiKey();
    }

    public void addKey(String sshKey) {
        connection.execute(new KeyAdd(sshKey));
    }

    public void removeKey(String sshKey) {
        connection.execute(new KeyRemove(sshKey));
    }

    public List listKeys() {
        return connection.execute(new KeyList());
    }

    public List listApps() {
        return connection.execute(new AppList());
    }

    public App getApp(String name) {
        return connection.execute(new AppInfo(name));
    }

    public App createApp() {
        return connection.execute(new AppCreate(new App().on(Heroku.Stack.Cedar)));
    }

    public App createApp(App app) {
        return connection.execute(new AppCreate(app));
    }

    public String renameApp(String appName, String newName) {
        return connection.execute(new AppRename(appName, newName)).getName();
    }

    public void destroyApp(String appName) {
        connection.execute(new AppDestroy(appName));
    }

    public AddonChange addAddon(String appName, String addonName) {
        return connection.execute(new AddonInstall(appName, addonName));
    }

    public List listAllAddons() {
        return connection.execute(new AddonList());
    }

    public List listAppAddons(String appName) {
        return connection.execute(new AppAddonsList(appName));
    }

    public AddonChange removeAddon(String appName, String addonName) {
        return connection.execute(new AddonRemove(appName, addonName));
    }

    // TODO: need addon upgrade/downgrade

    public void scaleProcess(String appName, String processType, int quantity) {
        connection.execute(new Scale(appName, processType, quantity));
    }

    public List listProcesses(String appName) {
        return connection.execute(new ProcessList(appName));
    }

    public List listReleases(String appName) {
        return connection.execute(new ListReleases(appName));
    }

    public String rollback(String appName, String releaseName) {
        return connection.execute(new Rollback(appName, releaseName));
    }

    public Release getReleaseInfo(String appName, String releaseName) {
        return connection.execute(new ReleaseInfo(appName, releaseName));
    }

    public List listCollaborators(String appName) {
        return connection.execute(new CollabList(appName));
    }

    public void addCollaborator(String appName, String collaborator) {
        connection.execute(new SharingAdd(appName, collaborator));
    }

    public void removeCollaborator(String appName, String collaborator) {
        connection.execute(new SharingRemove(appName, collaborator));
    }

    public void addConfig(String appName, Map config) {
        String jsonConfig = "{";
        String separator = "";
        for (Map.Entry configEntry : config.entrySet()) {
            jsonConfig = jsonConfig.concat(String.format("%s \"%s\":\"%s\"", separator, configEntry.getKey(), configEntry.getValue()));
            separator = ",";
        }
        jsonConfig = jsonConfig.concat("}");
        connection.execute(new ConfigAdd(appName, jsonConfig));
    }

    public Map listConfig(String appName) {
        return connection.execute(new ConfigList(appName));
    }

    public Map removeConfig(String appName, String configVarName) {
        return connection.execute(new ConfigRemove(appName, configVarName));
    }

    public void transferApp(String appName, String to) {
        connection.execute(new SharingTransfer(appName, to));
    }

    public LogStreamResponse getLogs(String appName) {
        return connection.execute(new Log(appName));
    }
    
    public LogStreamResponse getLogs(Log.LogRequestBuilder logRequest) {
        return connection.execute(new Log(logRequest));
    }

    public void run(String appName, String command) {
        connection.execute(new Run(appName, command));
    }

    public RunResponse runAttached(String appName, String command) {
        return connection.execute(new Run(appName, command, true));
    }

    public void restart(String appName) {
        connection.execute(new Restart(appName));
    }

    public void restartProcessByType(String appName, String type) {
        connection.execute(new Restart.ProcessTypeRestart(appName, type));
    }

    public void restartProcessByName(String appName, String procName) {
        connection.execute(new Restart.NamedProcessRestart(appName, procName));
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy