cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Custom Object :: Launch a Bomgar Session from Axeda

Highlighted
Level 1

Custom Object :: Launch a Bomgar Session from Axeda

/**

* Launch a Bomgar Session from Axeda

* (1) get Bomgar ID & check logged in

* (2) generate session key and external key

* (3) create / update software package with explorer execute instruction

* (4) deploy package against supplied asset

Add the following Paramters to the Action Custom Object

user

pwd

asset

*/

import net.sf.json.JSONObject

import groovyx.net.http.HTTPBuilder

import static groovyx.net.http.ContentType.*

import com.axeda.drm.sdk.scripto.Request

import com.axeda.services.v2.AssetReference

import com.axeda.services.v2.Asset

import com.axeda.services.v2.Model

import com.axeda.services.v2.ExecuteApplicationInstruction

import com.axeda.services.v2.SoftwarePackage

import com.axeda.services.v2.DeploymentType

import com.axeda.services.v2.Deployment

import com.axeda.services.v2.SoftwarePackageCriteria

String VERSION = "2.0.0.0"

String NAME = "LaunchBomgar"

String BOMGAR_HOST = "https://your.bomgar.box.com/"

String BOMGAR_PATH = "api/command.ns"

String BOMGAR_ID = "get_api_info"

String BOMGAR_SESS = "generate_session_key"

String BOMGAR_LOGG = "get_logged_in_reps"

def toJSON(msg){

    msg = [ response: msg ]

    toJSON = ['Content-Type': 'application/json', 'Content':JSONObject.fromObject(msg).toString(2)]

}

try

{

    String sBomgarID, sShortKey, sURL, sModel, sSerial, sExtKey, sError

    Boolean bLoggedIn=false

    def params = Request.parameters?.size() >2 ? Request.parameters : parameters

    String sUser = params.user

    String sPwd = params.pwd

    String sAssID = params.asset

    // find asset

    Asset myAsset = bridges.assetBridge.findById(sAssID)

    if (myAsset == null){

        logger.info "Asset ID not found " + sAssID

        return toJSON("Asset ID not found " + sAssID)

    }

    // find Model

    Model myModel = bridges.modelBridge.findById(myAsset.getModel().getSystemId())

    if (myModel == null){

        logger.info "Model not found"

        return toJSON("Model not found")

    }

    sSerial = myAsset.serialNumber

    sModel = myModel.modelNumber

    sExtKey  = sModel + "|" + sSerial

    // get my Bomgar rep id

    def Query = [username:sUser, password:sPwd, action:BOMGAR_ID]

    def bomgar = new HTTPBuilder(BOMGAR_HOST)

    bomgar.get ( path: BOMGAR_PATH, query: Query, contentType : XML ) { resp, xml ->

        sBomgarID = xml.user_id.text()

        sError = xml.text()

    }

    if (sBomgarID==""){

        logger.info "Bomgar (" + sUser + ") " + sError

        return toJSON("Bomgar (" + sUser + ") " + sError)

    }

    // check that I'm logged in

    Query = [username:sUser, password:sPwd, action:BOMGAR_LOGG]

    bomgar = new HTTPBuilder(BOMGAR_HOST)

    bomgar.get ( path: BOMGAR_PATH, query: Query, contentType : XML ) { resp, xml ->

        if (xml.rep.size() > 0) {

            xml.rep.each {

                if ( sBomgarID == it.@id.text() ) bLoggedIn = true

            }

        }

    }

    if (!bLoggedIn){

        logger.info "Bomgar (" + sUser + ") Not Logged In"

        return toJSON("Bomgar (" + sUser + ") Not Logged In")

    }

    // create a Bomgar session key

    Query = [username:sUser, password:sPwd, action:BOMGAR_SESS, type:'support', queue_id:'rep:' + sBomgarID, external_key:sExtKey]

    bomgar.get ( path: BOMGAR_PATH, query: Query, contentType : XML ) { resp, xml ->

        sURL = xml.key_url

        sShortKey = xml.short_key

    }

    if (sURL.size()<5){

        logger.info "Bomgar Session not generated"

        return toJSON("Bomgar Session not generated")

    }

    // search for existing package

    SoftwarePackageCriteria softCrit = new SoftwarePackageCriteria()

    softCrit.setName(NAME+sSerial)

    softCrit.setVersion(VERSION)

    packages = bridges.softwarePackageBridge.find(softCrit)

    // delete old packages

    bridges.softwarePackageBridge.delete(packages.getSoftwarePackages())

    // create execute instruction which runs explorer on asset

    ExecuteApplicationInstruction execIns = new ExecuteApplicationInstruction()

    execIns.setPathToExecutable("explorer")

    execIns.setAsyncExecution(true)

    execIns.setArguments("\"" + sURL + "\"")

    // create simple software package

    SoftwarePackage softPack = new SoftwarePackage()

    softPack.setName(NAME+sSerial)

    softPack.setModel(myAsset.model)

    softPack.setVersion(VERSION)

    softPack.instructions.add(execIns)

    result = bridges.softwarePackageBridge.create(softPack)

    if ( ! result.isSuccessful() ) {

        logger.info "Package error " + result.toString()

        return toJSON("Package error " + result.toString())

    }

    // create software deployment

    Deployment deploy = new Deployment()

    deploy.setSoftwarePackage(softPack)

    deploy.setType(DeploymentType.MANUAL)

    AssetReference assRef = myAsset

    deploy.assets.add(assRef)

    result = bridges.deploymentBridge.create(deploy)

    if ( ! result.isSuccessful() ) {

        logger.info "Deployment Error" + result

        return toJSON("Deployment error " + result)

    }

    else

    {

        logger.info "Session Deployed " + sShortKey

        return toJSON("Session Deployed " + sShortKey)

    }

}

catch (Exception e){

    logger.error(e)

    return toJSON(e.toString())

}

Tags (3)