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 for filtering by 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 to verify 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 JOC Cockpit and Controller 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 Standalone JOC Cockpit and Controller
response=$(./operate-joc.sh status "${request_options[@]}" --controller-id=controller)

# returns response
{"clusterState":{"_text":"ClusterUnknown","severity":2},"controllers":[{"componentState":{"_text":"operational","severity":0},"connectionState":{"_text":"established","severity":0},"controllerId":"controller","host":"localhost","id":20,"isCoupled":false,"javaVersion":"21+35-2513","os":{"architecture":"amd64","distribution":"3.10.0-1160.92.1.el7.x86_64","name":"Linux"},"role":"STANDALONE","securityLevel":"HIGH","startedAt":"2024-09-03T09:52:38.918Z","surveyDate":"2024-09-23T10:10:01.496Z","title":"Standalone Controller","url":"http://localhost:4444","version":"2.7.2"}],"database":{"componentState":{"_text":"operational","severity":0},"connectionState":{"_text":"established","severity":0},"dbms":"H2","version":"1.4.200 (2019-10-14)"},"deliveryDate":"2024-09-23T10:10:01.499Z","jocs":[{"componentState":{"_text":"operational","severity":0},"connectionState":{"_text":"established","severity":0},"controllerConnectionStates":[{"role":"STANDALONE","state":{"_text":"established","severity":0}}],"current":true,"host":"localhost","id":1,"instanceId":"joc#0","isApiServer":false,"lastHeartbeat":"2024-09-23T10:09:43.682Z","memberId":"localhost:1ce420678f21a574e6adeb2f218f5bd40ed1b1bf9005414bcf060fba2e4c5a67","os":{"architecture":"amd64","distribution":"3.10.0-1160.92.1.el7.x86_64","name":"Linux"},"securityLevel":"HIGH","startedAt":"2024-09-19T20:55:34.522Z","title":"My JOC Cockpit","url":"http://localhost:4446","version":"2.7.2"}]}

# getreads severity from status informationresponse
echo "$response" | jq -r '.jocs[0].componentState.severity // empty'
echo "$response" | jq -r '.jocs[0].connectionState.severity // empty'
echo "$response" | jq -r '.jocs[0].controllerConnectionStates[0].state.severity // empty'
echo "$response" | jq -r '.jocs[0].version // empty'
echo "$response" | jq -r '.database.componentState.severity // empty'
echo "$response" | jq -r '.database.connectionState.severity // empty'


# get status information for JOC Cockpit Cluster and Controller Cluster
response=$(./operate-joc.sh status "${request_options[@]}" --controller-id=controller)
 
# returns response
{"clusterState":{"_text":"ClusterCoupled","severity":0},"controllers":[{"clusterNodeState":{"_text":"inactive","severity":1},"clusterUrl":"http://localhost:4444","componentState":{"_text":"operational","severity":0},"connectionState":{"_text":"established","severity":0},"controllerId":"controller_cluster","host":"localhost","id":2,"isCoupled":true,"javaVersion":"17.0.12+7-alpine-r0","os":{"architecture":"amd64","distribution":"3.10.0-1160.92.1.el7.x86_64","name":"Linux"},"role":"PRIMARY","securityLevel":"MEDIUM","startedAt":"2024-09-18T20:29:33.271Z","surveyDate":"2024-09-23T10:07:16.768Z","title":"PRIMARY CONTROLLER","url":"http://localhost:4444","version":"2.7.2"},{"clusterNodeState":{"_text":"active","severity":0},"clusterUrl":"http://localhost:4444","componentState":{"_text":"operational","severity":0},"connectionState":{"_text":"established","severity":0},"controllerId":"controller_cluster","host":"localhost","id":3,"isCoupled":true,"javaVersion":"17.0.12+7-alpine-r0","os":{"architecture":"amd64","distribution":"3.10.0-1160.92.1.el7.x86_64","name":"Linux"},"role":"BACKUP","securityLevel":"MEDIUM","startedAt":"2024-09-18T20:29:33.972Z","surveyDate":"2024-09-23T10:07:16.737Z","title":"SECONDARY CONTROLLER","url":"http://localhost:44444","version":"2.7.2"}],"database":{"componentState":{"_text":"operational","severity":0},"connectionState":{"_text":"established","severity":0},"dbms":"MySQL","version":"5.7.33"},"deliveryDate":"2024-09-23T10:07:16.773Z","jocs":[{"clusterNodeState":{"_text":"active","severity":0},"componentState":{"_text":"operational","severity":0},"connectionState":{"_text":"established","severity":0},"controllerConnectionStates":[{"role":"PRIMARY","state":{"_text":"established","severity":0}},{"role":"BACKUP","state":{"_text":"established","severity":0}}],"current":true,"host":"localhost","id":3,"instanceId":"joc#0","isApiServer":false,"lastHeartbeat":"2024-09-23T10:07:13Z","memberId":"localhost:97c88ccc3975703ebd0b7277d394ec8768f88b31775e8df038572d2547c240a0","os":{"architecture":"amd64","distribution":"3.10.0-957.1.3.el7.x86_64","name":"Linux"},"securityLevel":"MEDIUM","startedAt":"2024-09-20T15:50:41Z","title":"PRIMARY JOC COCKPIT","url":"http://localhost:4446","version":"2.7.2"},{"clusterNodeState":{"_text":"inactive","severity":1},"componentState":{"_text":"operational","severity":0},"connectionState":{"_text":"established","severity":0},"controllerConnectionStates":[{"role":"PRIMARY","state":{"_text":"established","severity":0}},{"role":"BACKUP","state":{"_text":"established","severity":0}}],"current":false,"host":"localhost","id":1,"instanceId":"joc#1","isApiServer":false,"lastHeartbeat":"2024-09-23T10:07:12Z","memberId":"localhost:97c88ccc3975703ebd0b7277d394ec8768f88b31775e8df038572d2547c240a0","os":{"architecture":"amd64","distribution":"3.10.0-957.1.3.el7.x86_64","name":"Linux"},"securityLevel":"MEDIUM","startedAt":"2024-09-20T15:50:40Z","title":"SECONDARY JOC COCKPIT","url":"http://localhost:4446","version":"2.7.2"}]}

# getreads severity from status informationresponse
echo "$response" | jq -r '.clusterState.severity // empty'
echo "$response" | jq -r '.controllers[0].componentState.severity // empty'
echo "$response" | jq -r '.controllers[0].connectionState.severity // empty'
echo "$response" | jq -r '.controllers[1].componentState.severity // empty'
echo "$response" | jq -r '.controllers[1].connectionState.severity // empty'
echo "$response" | jq -r '.jocs[0].componentState.severity // empty'
echo "$response" | jq -r '.jocs[0].connectionState.severity // empty'
echo "$response" | jq -r '.jocs[0].version // empty'
echo "$response" | jq -r '.database.componentState.severity // empty'
echo "$response" | jq -r '.database.connectionState.severity // empty'

...

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"}

# getread severity from status informationresponse
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"}]}]}

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

# getreads 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'

# getreads 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
titleExamples for performing Health Checks
linenumberstrue
# common options for connection to JS7 REST API
request_options=(--url=http://localhost:4446 --user=root --password=root)

# perform health check for JOC Cockpit, Controller and Agents
./operate-joc.sh health-check "${request_options[@]}" --controller-id=controller

# Loglog output of the command can look like this with 2 Agents not being available
Database: MySQL 5.7.33
    Component State    : operational (0)
    Connection State   : established (0)
JOC Cockpit: PRIMARY JOC COCKPIT, URL: https://joc-2-0-primary.sos:7443, Date: 2024-11-11T15:11:01.19Z
    Cluster Node State: active (0)
    Component State:    operational (0)
    Connection State:   established (0)
JOC Cockpit: SECONDARY JOC COCKPIT, URL: http://centostest_primary.sos:7546, Date: 2024-11-11T15:11:01.19Z
    Cluster Node State: inactive (1)
    Component State:    operational (0)
    Connection State:   established (0)
JOC Cockpit Cluster State: ClusterCoupled (0)
PRIMARY Controller: PRIMARY CONTROLLER, ID: testsuite, URL: https://controller-2-0-primary:4443, is coupled: true, Date: 2024-11-11T15:11:01.186Z
    Cluster Node State: inactive (1)
    Component State:    operational (0)
    Connection State:   established (0)
BACKUP Controller: SECONDARY CONTROLLER, ID: testsuite, URL: https://controller-2-0-secondary:4443, is coupled: true, Date: 2024-11-11T15:11:01.158Z
    Cluster Node State: active (0)
    Component State:    operational (0)
    Connection State:   established (0)
STANDALONE Agent: primaryAgent, ID: agent_001, URL: https://agent-2-0-primary:4443, Controller ID: testsuite, Disabled: , Date: 2024-11-11T15:11:01.111Z
    Component State:    COUPLED (0)
STANDALONE Agent: apmaccsAgent, ID: agent_005, URL: http://192.11.3.3:4449, Controller ID: testsuite, Disabled: true, Date: 2024-11-11T15:11:01.111Z
    Component State:    UNKNOWN (2)
[WARN] Fatal Component State: UNKNOWN (2)
STANDALONE Agent: apmacwinAgent, ID: agent_006, URL: http://192.11.2.2:4245, Controller ID: testsuite, Disabled: true, Date: 2024-11-11T15:11:01.111Z
    Component State:    UNKNOWN (2)
[WARN] Fatal Component State: UNKNOWN (2)
CLUSTER Agent: AgentCluster001, ID: agent_cluster_001, Controller ID: testsuite, Date: 2024-11-11T15:11:01.111Z
  PRIMARY DIRECTOR:     Subagent ID: director_primary_001, URL: https://diragent-2-0-primary:4443
    Cluster Node State: active (0)
    Component State:    COUPLED (0)
  SECONDARY DIRECTOR:   Subagent ID: director_secondary_001, URL: https://diragent-2-0-secondary:4443
    Cluster Node State: inactive (1)
    Component State:    COUPLED (0)
STANDALONE Agent: secondaryAgent, ID: agent_002, URL: https://agent-2-0-secondary:4443, Controller ID: testsuite, Disabled: , Date: 2024-11-11T15:11:01.111Z
    Component State:    COUPLED (0)
STANDALONE Agent: oracleAgent, ID: agent_010, URL: http://minos.sos:4445, Controller ID: testsuite, Disabled: , Date: 2024-11-11T15:11:01.111Z
    Component State:    COUPLED (0)
STANDALONE Agent: testAgent, ID: agent_011, URL: http://centostest_primary.sos:7775, Controller ID: testsuite, Disabled: , Date: 2024-11-11T15:11:01.111Z
    Component State:    COUPLED (0)
STANDALONE Agent: wintestAgent, ID: agent_021, URL: http://192.11.0.146:4445, Controller ID: testsuite, Disabled: , Date: 2024-11-11T15:11:01.111Z
    Component State:    COUPLED (0)
STANDALONE Agent: winutf8Agent, ID: agent_022, URL: http://192.11.0.146:4245, Controller ID: testsuite, Disabled: , Date: 2024-11-11T15:11:01.111Z
    Component State:    COUPLED (0)
[ERROR] health check identified 2 fatal problems

...

Code Block
languagebash
titleExamples for performing Health Checks for Host Shutdown Scenario
linenumberstrue
# common options for connection to JS7 REST API
request_options=(--url=http://localhost:4446 --user=root --password=root)

# performperforms health check for JOC Cockpit, Controller and Agents assuming the shutdown of the Primary Controller's host
./operate-joc.sh health-check "${request_options[@]}" --controller-id=controller --agent-cluster --whatif-shutdown=controller-2-0-primary

Database: MySQL 5.7.33
    Component State    : operational (0)
    Connection State   : established (0)
JOC Cockpit: PRIMARY JOC COCKPIT, URL: https://joc-2-0-primary.sos:7443, Date: 2024-11-11T15:16:41.664Z
    Cluster Node State: active (0)
    Component State:    operational (0)
    Connection State:   established (0)
    What if host is shutdown: controller-2-0-primary: ok
JOC Cockpit: SECONDARY JOC COCKPIT, URL: http://centostest_primary.sos:7546, Date: 2024-11-11T15:16:41.664Z
    Cluster Node State: inactive (1)
    Component State:    operational (0)
    Connection State:   established (0)
    What if host is shutdown: controller-2-0-primary: ok
JOC Cockpit Cluster State: ClusterCoupled (0)
PRIMARY Controller: PRIMARY CONTROLLER, ID: testsuite, URL: https://controller-2-0-primary:4443, is coupled: true, Date: 2024-11-11T15:16:41.659Z
    Cluster Node State: inactive (1)
    Component State:    operational (0)
    Connection State:   established (0)
    What if host is shutdown: controller-2-0-primary: ok
BACKUP Controller: SECONDARY CONTROLLER, ID: testsuite, URL: https://controller-2-0-secondary:4443, is coupled: true, Date: 2024-11-11T15:16:41.638Z
    Cluster Node State: active (0)
    Component State:    operational (0)
    Connection State:   established (0)
    What if host is shutdown: controller-2-0-primary: ok
CLUSTER Agent: AgentCluster001, ID: agent_cluster_001, Controller ID: testsuite, Date:
  PRIMARY DIRECTOR:     Subagent ID: director_primary_001, URL: https://diragent-2-0-primary:4443
    Cluster Node State: active (0)
    Component State:    COUPLED (0)
  SECONDARY DIRECTOR:   Subagent ID: director_secondary_001, URL: https://diragent-2-0-secondary:4443
    Cluster Node State: inactive (1)
    Component State:    COUPLED (0)
  What if host is shutdown: controller-2-0-primary: ok
health check identified no problem if host is shutdown: controller-2-0-primary

Getting Version Information

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

# get JOC Cockpit version
.


# performs health check for JOC Cockpit, Controller and Agents assuming the shutdown of the Primary and Secondary Director Agent host
./bin/operate-joc.sh versionhealth-check "${request_options[@]}" --controller-id=testsuite --agent-cluster --whatif-shutdown=diragent-2-0-primary,diragent-2-0-secondary

Database: MySQL 5.7.33
    Component State    : operational (0)
    Connection State   : established (0)
JOC Cockpit: PRIMARY JOC COCKPIT, URL: https://joc-2-0-primary.sos:7443, Date: 2024-11-11T20:45:33.983Z
    Cluster Node State: inactive (1)
    Component State:    operational (0)
    Connection State:   established (0)
    What if host is shutdown: diragent-2-0-primary,diragent-2-0-secondary: ok
JOC Cockpit: SECONDARY JOC COCKPIT, URL: http://centostest_primary.sos:7546, Date: 2024-11-11T20:45:33.983Z
    Cluster Node State: active (0)
    Component State:    operational (0)
    Connection State:   established (0)
    What if host is shutdown: diragent-2-0-primary,diragent-2-0-secondary: ok
JOC Cockpit Cluster State: ClusterCoupled (0)
PRIMARY Controller: PRIMARY CONTROLLER, ID: testsuite, URL: https://controller-2-0-primary:4443, is coupled: true, Date: 2024-11-11T20:45:33.978Z
    Cluster Node State: inactive (1)
    Component State:    operational (0)
    Connection State:   established (0)
    What if host is shutdown: diragent-2-0-primary,diragent-2-0-secondary: ok
BACKUP Controller: SECONDARY CONTROLLER, ID: testsuite, URL: https://controller-2-0-secondary:4443, is coupled: true, Date: 2024-11-11T20:45:33.958Z
    Cluster Node State: active (0)
    Component State:    operational (0)
    Connection State:   established (0)
    What if host is shutdown: diragent-2-0-primary,diragent-2-0-secondary: ok
CLUSTER Agent: AgentCluster001, ID: agent_cluster_001, Controller ID: testsuite, Date:
  PRIMARY DIRECTOR:     Subagent ID: director_primary_001, URL: https://diragent-2-0-primary:4443
    Cluster Node State: active (0)
    Component State:    COUPLED (0)
  SECONDARY DIRECTOR:   Subagent ID: director_secondary_001, URL: https://diragent-2-0-secondary:4443
    Cluster Node State: inactive (1)
    Component State:    COUPLED (0)
[WARN] What if host is shutdown: diragent-2-0-primary,diragent-2-0-secondary: failure
[ERROR] health check identified 1 problems if host is shutdown: diragent-2-0-primary,diragent-2-0-secondary

Getting Version Information

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

# get JOC Cockpit version
./operate-joc.sh version "${request_options[@]}"
# returns

# returns
2.7.2

# get Controller version
./operate-joc.sh version "${request_options[@]}" --controller-id=controller
# returns
2.7.2

# get Standalone Agent version
./operate-joc.sh version "${request_options[@]}" --agent-id=StandaloneAgent
# returns
2.7.2

# get Agent Cluster version
./operate-joc.sh version "${request_options[@]}" --agent-id=AgentCluster
# returns
2.7.2

# get version of specific Controller and of all Agents in Agent Cluster
response=$(./operate-joc.sh version "${request_options[@]}" --controller-id=controller --agent-id=AgentCluster --json)
# returns response
{
  "agentVersions":[
    {"agentId":"AgentCluster","compatibility":"COMPATIBLE","uri":"https://diragent-2-0-primary:4443","version":"2.7.2"},
    {"agentId":"AgentCluster","compatibility":"COMPATIBLE","subagentId":"director_primary_001","uri":"https://diragent-2-0-primary:4443","version":"2.7.2"},
    {"agentId":"AgentCluster","compatibility":"COMPATIBLE","subagentId":"director_secondary_001","uri":"https://diragent-2-0-secondary:4443","version":"2.7.2"},
    {"agentId":"AgentCluster","compatibility":"COMPATIBLE","subagentId":"subagent_primary_001","uri":"https://subagent-2-0-primary:4443","version":"2.7.2"},
    {"agentId":"AgentCluster","compatibility":"COMPATIBLE","subagentId":"subagent_secondary_001","uri":"https://subagent-2-0-secondary:4443","version":"2.7.2"},
    {"agentId":"AgentCluster","compatibility":"COMPATIBLE","subagentId":"subagent_third_001","uri":"https://subagent-2-0-third:4443","version":"2.7.2"}
  ],
  "controllerVersions":[
    {"compatibility":"COMPATIBLE","controllerId":"controller","uri":"https://controller-2-0-standalone:4443","version":"2.7.2"}
  ],
  "jocVersion":"2.7.2"
}
# getread version of specifc Agent
echo "$response" | jq -r '.agentVersions[] | select(.subagentId == "director_primary_001") | .version // 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 Getting and Storing Settings
linenumberstrue
# common options for connection to JS7 REST API
request_options=(--url=http://localhost:4446 --user=root --password=root)

# get settings
settings=$(./operate-joc.sh get-settings "${request_options[@]}")

# update settings
settings=$(echo "$settings" | jq '.dailyplan.days_ahead_submit.value = "4"')
settings=$(echo "$settings" | jq '.dailyplan.days_ahead_plan.value = "6"')

# store settings
./operate-joc.sh store-settings "${request_options[@]}" --settings="$settings"

...

Using encrypted Passwords

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 CertificateEncrypt"

# 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 athe secret such as a password 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...
./operate-joc.sh encrypt --in="root" --cert=encrypt.crt

# 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="enc:BEXbHYa...$MY_JS7_PASSWORD" --key=encrypt.key --controller-id=controller)

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

# decrypt an encrypted secret using the Private Key
./operate-joc.sh decrypt --in="enc:BEXbHYa..." --key=encrypt.key

Resources