Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

CommandDocumentation
statusJS7 - Dashboard


status-agent
health-check

JS7 - How to check the Impact of Host Shutdown when Patching

version

JS7 - Compatibility Indicator

switch-over

JS7 - How to fail-over and switch-over between JOC Cockpit Cluster Instances

restart-service / run-service

JS7 - Dashboard

check-license

JS7 - How to apply a JS7 License Key

get-settings / store-settings

JS7 - Settings

encrypt / decrypt

Encrypt / decrypt strings and filesJS7 - Encryption and Decryption


The script is offered for download and can be applied for frequently used operations:

...

Code Block
titleUsage
Usage: operate-joc.sh [Command] [Options] [Switches]

  Commands:
    status              --controller-id
    status-agent        --controller-id  [--agent-id] [--agent-state] [--agent-cluster] [--no-hidden]
    health-check        --controller-id  [--agent-id] [--agent-state] [--agent-cluster] [--no-hidden] [--whatif-shutdown]
    version            [--controller-id] [--agent-id] [--json]
    switch-over         --controller-id
    restart-service     [--service-type]  [--proxies]
    run-service         --service-type
    check-license      [--validity-days]
    get-settings
    store-settings      --settings
    encrypt             --in [--infile --outfile] --cert [--java-home] [--java-lib]
    decrypt             --in [--infile --outfile] --key [--key-password] [--java-home] [--java-lib]

  Options:
    --url=<url>                        | required: JOC Cockpit URL
    --user=<account>                   | required: JOC Cockpit user account
    --password=<password>              | optional: JOC Cockpit password
    --ca-cert=<path>                   | optional: path to CA Certificate used for JOC Cockpit login
    --client-cert=<path>               | optional: path to Client Certificate used for login
    --client-key=<path>                | optional: path to Client Key used for login
    --timeout=<seconds>                | optional: timeout for request, default: 60
    --controller-id=<id>               | optional: Controller ID
    --agent-id=<id[,id]>               | optional: Agent ID
    --agent-state=<state[,state]>      | optional: Agent state filters such as
                                                   COUPLED, RESETTING, RESET, INITIALISED, COUPLINGFAILED, SHUTDOWN
    --service-type=<identifier>        | optional: service for restart such as cluster, history, dailyplan, cleanup, monitor
    --validity-days=<number>           | optional: min. number of days for which a license should be valid, default: 60
    --settings=<json>                  | optional: settings to be stored from JSON
    --whatif-shutdown=<host[,host]>    | optional: health status if hosts will be shutdown
    --key=<path>                       | optional: path to private key file in PEM format
    --key-password=<password>          | optional: password for private key file
    --cert=<path>                      | optional: path to certificate file in PEM format
    --in=<string>                      | optional: input string for encryption/decryption
    --infile=<path>                    | optional: input file for encryption/decryption
    --outfile=<path>                   | optional: output file for encryption/decryption
    --java-home=<directory>            | optional: Java Home directory for encryption/decryption, default: $JAVA_HOME
    --java-lib=<directory>             | optional: Java library directory for encryption/decryption, default: ./lib
    --audit-message=<string>           | optional: audit log message
    --audit-time-spent=<number>        | optional: audit log time spent in minutes
    --audit-link=<url>                 | optional: audit log link
    --log-dir=<directory>              | optional: path to directory holding the script's log files

  Switches:
    -h | --help                        | displays usage
    -v | --verbose                     | displays verbose output, repeat to increase verbosity
    -p | --password                    | asks for password
    -k | --key-password                | asks for key password
    -x | --proxies                     | specifies proxy services for restart
    -j | --json                        | returns version information in JSON format
    --agent-cluster                    | filters non-clustered Agents
    --no-hidden                        | filters hidden Agents
    --show-logs                        | shows log output if --log-dir is used
    --make-dirs                        | creates directories if they do not exist

...

  • health-check
    • Performs a health check and returns status information for each JOC Cockpit, Controller and Agent instances.
      • When used with the --agent-id option, filters the indicated. Agents. More than one Agent ID can be specified separated by comma, for example: --agent-id=agent1,agent2.
      • When used with the --agent-state option, allows to filter Agents by state.: COUPLED, RESETTING, RESET, INITIALISED, COUPLINGFAILED, SHUTDOWN, UNKNOWN. More than one Agent state can be specified separated by comma, for example: --agent-state=COUPLED,COUPLINGFAILED.
      • When used with the --agent-cluster switch, limits the scope to clustered Agents.
      • When used with the --no-hidden switch, limits the scope to Agents that are not hidden.
      • The health check will return exit code 0 for a healthy environment and exit 2 for an unhealthy envirornment.
    • Checks the scenario of host shutdown when used with the --whatif-shutdown option. The option takes a hostname. More than one hostname can be specified separated by comma, for example: --whatif-shutdown=host1.example.com,host2.example.com. The check implies verifying if the JS7 scheduling environment will remain operational in case that the given host or hosts will be shut down.
  • version
    • Returns version information of JOC Cockpit, Controller and Agents.
      • When used without options, the JOC Cockpit version will be returned.
      • When usiedf with the --controller-id option, the version of the indicated Controller will be returned.
      • When used with the --agent-id option, the version of the indicated Agent will be returned. If a Cluster Agent is specified, then version information for included Director Agents and Subagents will be returned in JSON format.
    • When used with the --json switch, information about included Controllers and/or Agents will be returned in JSON format.
  • switch-over
    • Shifts the active role to the Standby JOC Cockpit instance.
  • restart-service
    • Allows to restart JOC Cockpit proxy services when used with the --proxies switch.
    • Allows to restart JOC Cockpit background services. One of the following services can must be specified using the --service-type option:
      • cluster, history, dailyplan, cleanup, monitor
    • JOC Cockpit background services will run based on events (cluster, history, monitor) or based on schedules configurable with JS7 - Settings (dailyplan, cleanup). To force a background service to start immediately the run-service command can be used.
  • run-service
    • Starts JOC Cockpit background services. One of the following services can be specified using the --service-type option:
      • dailyplan, cleanup
    • JOC Cockpit background services will run based on schedules configurable with JS7 - Settings (dailyplan, cleanup). The run-service command will force immediate execution of the service.
  • check-license
    • Checks which JS7 - License is available with JOC Cockpit and if it is valid for a predetermined period.
      • The Open Source License is valid for any period of time and will not expire.
      • The Commercial License can be perpetual or can be valid for a limited subscription period.
    • The --validity-days option specifies the number of days before expiration of the Commercial License. Default: 60 days.
    • Exit codes of the license check include: 
      • Exit code 0 signals a valid license for the period specified.
      • Exit code 2 signals an expired license or an inapplicable license check if the Open Source License is used.
      • Exit code 3 signals a valid license that is about to expire within the number of days specified.
  • get-settings
    • Returns JS7 - Settings in JSON format.
    • Users can modify settings using the jq utility and can update settings using the store-settings command.
  • store-settings
    • Updates JS7 - Settings in JOC Cockpit. 
    • Users can read settings using the get-settings command and can modify settings using the jq utility before updating settings.
  • encrypt
    • Allows to encrypt a value using the --in option. If used to encrypt a file then --infile and --outfile options must be specified.
    • The --cert option specifies the path to a file holding the Certificate used for encryption.
    • Encryption is performed by Java libraries that are looked up in the ./lib sub-directory of the  JS7 Unix Shell CLI. For details see JS7 - Encryption and Decryption.
  • decrypt
    • Allows to decrypt a value using the --in option. If used to decrypt a file then --infile and --outfile options must be specified.
    • The --key option specifies the path to the Private Key used for decryption. If the Private Key is protected by a password, then the --key-password option or switch must be specified.
    • Decryption is performed by Java libraries that are looked up in the ./lib sub-directory of the JS7 Unix Shell CLI.

...

Code Block
languagebash
titleExamples for Getting Agent Status Information
linenumberstrue
# common options for connection to JS7 REST API
request_options=(--url=http://localhost:4446 --user=root --password=root)

# get status information for indicated Standalone Agents
response=$(./operate-joc.sh status-agent "${request_options[@]}") --controller-id=controller --agent-id=agent_001,agent_002)

# returns response
{"agents":[{"agentId":"agent_001","agentName":"primaryAgent","controllerId":"testsuite","disabled":false,"healthState":{"_text":"ALL_SUBAGENTS_ARE_COUPLED_AND_ENABLED","severity":0},"runningTasks":0,"state":{"_text":"COUPLED","severity":0},"url":"https://agent-2-0-primary:4443","version":"2.7.2-SNAPSHOT"},{"agentId":"agent_002","agentName":"secondaryAgent","controllerId":"testsuite","disabled":false,"healthState":{"_text":"ALL_SUBAGENTS_ARE_COUPLED_AND_ENABLED","severity":0},"runningTasks":0,"state":{"_text":"COUPLED","severity":0},"url":"https://agent-2-0-secondary:4443","version":"2.7.2-SNAPSHOT"}],"deliveryDate":"2024-11-11T18:45:28.855Z","surveyDate":"2024-11-11T18:45:06.798Z"}

# read severity from response
echo "$response" | jq -r '.agents[0].state.severity // empty'


# get status information for Agent Cluster
response=$(./operate-joc.sh status-agent "${request_options[@]}") --controller-id=controller --agent-cluster)

# returns response
{"agents":[{"agentId":"agent_cluster_001","agentName":"AgentCluster001","clusterState":{"_text":"ClusterCoupled","severity":0},"controllerId":"testsuite","healthState":{"_text":"ALL_SUBAGENTS_ARE_COUPLED_AND_ENABLED","severity":0},"runningTasks":0,"subagents":[{"agentId":"agent_cluster_001","disabled":false,"runningTasks":0,"state":{"_text":"COUPLED","severity":0},"subagentId":"director_primary_001","url":"https://diragent-2-0-primary:4443","version":"2.7.2-SNAPSHOT","clusterNodeState":{"_text":"active","severity":0},"isDirector":"PRIMARY_DIRECTOR"},{"agentId":"agent_cluster_001","disabled":false,"runningTasks":0,"state":{"_text":"COUPLED","severity":0},"subagentId":"director_secondary_001","url":"https://diragent-2-0-secondary:4443","version":"2.7.2-SNAPSHOT","clusterNodeState":{"_text":"inactive","severity":1},"isDirector":"SECONDARY_DIRECTOR"},{"agentId":"agent_cluster_001","disabled":false,"runningTasks":0,"state":{"_text":"COUPLED","severity":0},"subagentId":"subagent_primary_001","url":"https://subagent-2-0-primary:4443","version":"2.7.2-SNAPSHOT","isDirector":"NO_DIRECTOR"},{"agentId":"agent_cluster_001","disabled":false,"runningTasks":0,"state":{"_text":"COUPLED","severity":0},"subagentId":"subagent_secondary_001","url":"https://subagent-2-0-secondary:4443","version":"2.7.2-SNAPSHOT","isDirector":"NO_DIRECTOR"},{"agentId":"agent_cluster_001","disabled":false,"runningTasks":0,"state":{"_text":"COUPLED","severity":0},"subagentId":"subagent_third_001","url":"https://subagent-2-0-third:4443","version":"2.7.2-SNAPSHOT","isDirector":"NO_DIRECTOR"}]}]}

# reads cluster state from status information
echo "$response" | jq -r '.agents[0].clusterState.severity // empty'

# reads Primary and Secondary Director Agent component state
echo "$response" | jq -r '.agents[0].subagents[0].state.severity // empty'
echo "$response" | jq -r '.agents[0].subagents[1].state.severity // empty'

# reads Primary and Secondary Director Agent cluster node state
echo "$response" | jq -r '.agents[0].subagents[0].clusterNodeState.severity // empty'
echo "$response" | jq -r '.agents[0].subagents[1].clusterNodeState.severity // empty'

...

Code Block
languagebash
titleExample Examples for Restarting and Running Services
linenumberstrue
# common options for connection to JS7 REST API
request_options=(--url=http://localhost:4446 --user=root --password=root)

# restart proxy service
./operate-joc.sh restart-service "${request_options[@]}" --proxies

# restart service: cluster, history, dailyplan, cleanup, monitor
./operate-joc.sh restart-service "${request_options[@]}" --service-type=history

# run service: dailyplan, cleanup
./operate-joc.sh run-service "${request_options[@]}" --service-type=cleanup

...

Code Block
languagebash
titleExample for Encrypting and DecryptingUse of encrypted Password
linenumberstrue
# create Private Key
openssl ecparam -name secp384r1 -genkey -noout -out encrypt.key

# create Certificate Signing Request, adjust the subject to your needs
openssl req -new -sha512 -nodes -key encrypt.key -out encrypt.csr -subj "/C=DE/ST=Berlin/L=Berlin/O=SOS/OU=IT/CN=Encrypt"

# create Certificate, adjust the validity period to your needs
openssl x509 -req -sha512 -days 1825 -signkey encrypt.key -in encrypt.csr -out encrypt.crt -extfile <(printf "keyUsage=critical,keyEncipherment,keyAgreement\n")


# encrypt the password "root" using the Certificate, the encryption result will be returned and will look like: enc:BEXbHYa...
MY_JS7_PASSWORD=$(./operate-joc.sh encrypt --in="root" --cert=encrypt.crt)

# store the environment variable to your profile ($HOME/.bash_profile or similar) to make the encrypted password available to the shell
# export MY_JS7_PASSWORD=enc:BEXbHYa...


# options for connection to the JS7 REST API can specify the encryption result as password and the Private Key for decryption
request_options=(--url=http://localhost:4446 --user=root --password="$MY_JS7_PASSWORD" --key=encrypt.key --controller-id=controller)

# for example, when reading version information, the Private Key is used to decrypt the password on-the-fly for access to the REST API
./operate-joc.sh version "${request_options[@]}"

...