Skip to main content

JOD Shell

The JOD Shell is the interactive command line provided with the JOD Agent.

It's initialized only when the JOD Agent is executed as foreground command and allow user to manage internal JOD instance.

JOD Shell provide different commands. Here are listed all available commands grouped by JOD Sub System they interact with.

  • JOD: object's info and states
  • JCP: JOSP Cloud connection management
  • Communication: direct and cloud communications management
  • Permissions: list and edit object's permissions
  • Structure: object's structure queries
  • Workers: workers testing commands

A full list of available JOD Shell commands can be printed with the ?list command. Type the exit command, to exit from the JOD Shell and to shutdown the JOD Agent.


JOD

info

Print current object's info like object's id, name, model, brand... and the owner id.

Example output:

OBJECT'S INFO
ObjId . . . . . AAQNQ-AENAM-XCQUM
ObjName . . . . Gooseberry_44
Model . . . . . JOD Test Object 2.0
Brand . . . . . John OS
Descr . . . . . Object to use in design testing
USER'S INFO
OwnerId . . . . f89b2e21-d3cb-41d2-8349-ef2d5e247f37

info-obj

Print current object's info like object's id, name, model, brand...

Example output:

OBJECT'S INFO
ObjId . . . . . AAQNQ-AENAM-XCQUM
ObjName . . . . Gooseberry_44
Model . . . . . JOD Test Object 2.0
Brand . . . . . John OS
Descr . . . . . Object to use in design testing

info-user

Print current object owner's info like owner id.

Example output:

USER'S INFO
OwnerId . . . . f89b2e21-d3cb-41d2-8349-ef2d5e247f37

jod-state

Print current JOD state. RUN if it's running, STOP if not.

jod-start

Start internal JOD instance.
The internal instance is started by default on each JOD Agent startup.

You can check the internal JOD instance state using the jod-state command.

jod-stop

Stop internal JOD instance.
The internal instance can be stopped and the re-started with the jod-start command.

You can check the internal JOD instance state using the jod-state command.

Print working environment info like java path and version, environment vars, jod version...

Example output:

John Object Daemon versions:   2.2.2-DEV-202110111459
+-----------------
| Current dir: /Users/robertopompermaier/Workspaces/josp.com/com.robypomper.josp/envs/runnables/jod/JOD
+-----------------
| Java Version: 1.8(1.8.0_262)
| Java VM Version: 1.8
| Java Runtime: OpenJDK Runtime Environment
| Java Home: /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre
| Java Home (ENV): /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
| Java Vendor: AdoptOpenJDK
| Java Libs Path: /Users/user/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
| Java ClassPath: /Users/user/Workspaces/josp.com/com.robypomper.josp/build/classes/java/jospJOD:/Users/robertopompermaier/Workspaces/josp.com/com.robypomper.josp/build/resources/jospJOD:/Users/robertopompermaier/.m2/repository/com/robypomper/josp/jospCommons/2.2.2-DEV/jospCommons-2.2.2-DEV.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.4/c51c00206bb913cd8612b24abd9fa98ae89719b1/commons-cli-1.4.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/com.googlecode.clichemaven/cliche/110413/6b857d46798400f1f19f5fe7c4f6de4c5d16ede0/cliche-110413.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/net.sourceforge.htmlcleaner/htmlcleaner/2.24/3e193655071befbf2a1ed5efb7d2d05deb302325/htmlcleaner-2.24.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/com.jayway.jsonpath/json-path/2.4.0/765a4401ceb2dc8d40553c2075eb80a8fa35c2ae/json-path-2.4.0.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-slf4j-impl/2.13.1/79e92fe5b6c30cc4c8a52893378d4d130e298c65/log4j-slf4j-impl-2.13.1.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-core/2.13.1/533f6ae0bb0ce091493f2eeab0c1df4327e46ef1/log4j-core-2.13.1.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.13.1/cc670f92dc77bbf4540904c3fa211b997cba00d8/log4j-api-2.13.1.jar:/Users/robertopompermaier/.m2/repository/com/robypomper/josp/jospAPIs/2.2.2-DEV/jospAPIs-2.2.2-DEV.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/org.yaml/snakeyaml/1.25/8b6e01ef661d8378ae6dd7b511a7f2a33fae1421/snakeyaml-1.25.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/com.github.scribejava/scribejava-apis/6.9.0/a374c7a36533e58e53b42b584a8b3751ab1e13c4/scribejava-apis-6.9.0.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/com.github.scribejava/scribejava-core/6.9.0/ed761f450d8382f75787e8fee9ae52e7ec768747/scribejava-core-6.9.0.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/org.jmdns/jmdns/3.5.5/a156f2da3a29df61e2cab6f4d47c22f42114e2d/jmdns-3.5.5.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/org.jdom/jdom2/2.0.6/6f14738ec2e9dd0011e343717fa624a10f8aab64/jdom2-2.0.6.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/net.minidev/json-smart/2.3/7396407491352ce4fa30de92efb158adb76b5b/json-smart-2.3.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.30/b5a4b6d16ab13e34a88fae84c35cd5d68cac922c/slf4j-api-1.7.30.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.10.5.1/7ff756c3af1fe95cb3cddba9158fc3289ca06387/jackson-databind-2.10.5.1.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.10.5/33298de8da86f92f8ccd61ced214d3b16f8c531e/jackson-annotations-2.10.5.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/net.minidev/accessors-smart/1.2/c592b500269bfde36096641b01238a8350f8aa31/accessors-smart-1.2.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.10.5/db2ba27938de7f2d478a97d6abcdaa17cbbd3cea/jackson-core-2.10.5.jar:/Users/robertopompermaier/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/5.0.4/da08b8cce7bbf903602a25a3a163ae252435795/asm-5.0.4.jar
+-----------------
| OS Name: Mac OS X
| OS Version: 10.16
| Current user: user
| Dflt language: it
| Dflt encoding: UTF-8
| File encoding: UTF-8
| Env Vars: PATH: /Users/user/Workspaces/java jdks/google-cloud-sdk/bin:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
HOME: /Users/user
...other env vars...
+-----------------
| Working dir: /Users/robertopompermaier/Workspaces/josp.com/com.robypomper.josp/envs/runnables/jod/JOD
+-----------------

info-set-object-name (new_name)

Update current object's name.

You can set any valid string as object's name, also including space and special chars.

JOD> info-set-object-name "Entrance Lamp 1"

JCP

jcp-client-status

Print JCP connection state. JCP Client is connect. if current JOD instance is connected to the JCP, JCP Client is NOT connect. if not.

jcp-client-connect

Connect internal JOD instance to the JCP.
At JOD Agent startup, the JCP connection is initialized only if the property jcp.connect from JOD Agent configs is set to 'true'.

You can check the JCP connection state using the jcp-client-status command.

jcp-client-disconnect

Disconnect internal JOD instance from JCP.
The internal instance can be disconnected and the re-connected with the jcp-client-connect command.

You can check the JCP connection state using the jcp-client-status command.


Communication

comm-local-status

Print the status of the JOD Local Server. Prints 'Local communication discovery system is true' if server is running, '' otherwise.

comm-local-start

Start internal JOD Local Server.
At JOD Agent startup, the local server is started only if the property jod.comm.local.enabled from JOD Agent configs is set to 'true'.

You can check the JOD Local Server state using the comm-local-status command.

comm-local-stop

Disconnect all Direct JOSP Services clients, and stop internal JOD Local Server.
The local server can be stopped and the re-started with the comm-local-start command.

You can check the JOD Local Server state using the comm-local-status command.

comm-print-all-local-connections

Print a list of all Direct JOSP Service clients are connected to JOD Local Server.

Example output:

LOCAL CONNECTIONS LIST
- localhost/127.0.0.1:54284 (srv: test-client-srv; usr: f89b2e21-d3cb-41d2-8349-ef2d5e247f37; status: connected; local: /127.0.0.1:1234)

comm-cloud-status

Print the status of the JOD Local Server. Prints 'Local communication discovery system is true' if server is running, '' otherwise.

comm-cloud-connect

Connect JOD Gateway O2S Client to JCP if available.
At JOD Agent startup, the gateway client is initialized only if the property jod.comm.cloud.enabled from JOD Agent configs is set to 'true'.

You can check the JOD Gateway O2S Client state using the comm-cloud-status command.

comm-cloud-disconnect

Disconnect the JOD Gateway O2S Client and then all Cloud JOSP Services clients.
The gateway client can be disconnected and the re-connected with the comm-cloud-connect command.

You can check the JOD Gateway O2S Client state using the comm-cloud-status command.


Permissions

permissions-list

Print all object's permissions.

Example output:

OBJECT'S PERMISSIONS LIST
+--------------------+----------------------+----------------------+---------------------------+-------------------------+-------------------------+
| ObjId | SrvId | UsrId | Perm. and Connection Type | Updated At | PermId |
+--------------------+----------------------+----------------------+---------------------------+-------------------------+-------------------------+
| AAQNQ-AENAM-XCQUM | #All | #Owner | CoOwner , LocalAndCloud | 20211011-165956970 | NRJOPHLNLYMFHMEPFWQR |
| AAQNQ-AENAM-XCQUM | #All | #All | CoOwner , OnlyLocal | 20211011-165956970 | PKRWBGVQRJOERQDRQHWI |
| AAQNQ-AENAM-XCQUM | #All | #All | Actions , OnlyLocal | 20211011-171213402 | NPSIUIIFNOOLDQJSWGEW |
| AAQNQ-AENAM-XCQUM | #All | #All | Status , LocalAndCloud | 20211011-171216574 | XVIUCTUFWQLNUCGUHCXG |
+--------------------+----------------------+----------------------+---------------------------+-------------------------+-------------------------+

permission-add (srvId, usrId, type, connection)

Add a new permission build with given values.

  • srvId: service's id or '#All' wildcard
  • usrId: user's id to or '#All' or '#Owner' wildcards
  • type: permission level granted ('None', 'Status', 'Actions' or 'CoOwner')
  • connection: OnlyLocal to apply permission only to direct communication, LocalAndCloud to apply permission also to cloud communications.

Following example adds an Actions permission for any user that use the 'x-y-z' JOSP service:

JOD> permission-add "x-y-z" "#All" Actions LocalAndCloud

permission-update (permId, srvId, usrId, type, connection)

Update given permission with given values.

  • permId: the reference to the permission to update, you can get it with the permissions-list command.
  • srvId: service's id or '#All' wildcard
  • usrId: user's id to or '#All' or '#Owner' wildcards
  • type: permission level granted ('None', 'Status', 'Actions' or 'CoOwner')
  • connection: OnlyLocal to apply permission only to direct communication, LocalAndCloud to apply permission also to cloud communications.

permission-remove (permId)

Delete given permission from object.

permission-owner-set (usrId)

Set given user's id as object's owner id.

permission-owner-reset

Set object's owner id equals '00000-00000-00000', the default value.


Structure

obj-tree

Prints current object's structure.

Example output:

 Component             (Type)                      | Path
---------------------------------------------------+------------------------------------------------
+ root (JODRoot_Jackson) |
| + Group that contains status (AbsJODContainer) | Group that contains status
| | + State 0-50 (JODRangeState) | Group that contains status>State 0-50
| | + State On/Off (JODBooleanState) | Group that contains status>State On/Off
| + Light example (AbsJODContainer) | Light example
| | + Consumption (JODRangeState) | Light example>Consumption
| | + Switch (JODBooleanAction) | Light example>Switch
...

obj-component (compPath)

Prints 'compPath''s Pillar info like his full path and workers instances.

Example output for obj-component "Light example > Switch":

--- Component START ---
# Switch
- Path #: Light example>Switch
- Worker: file://Switch
- Executor: shell://Switch
--- --------------- ---

obj-component

Prints 'root' Pillar info like his full path and workers instances.

Example output:

--- Component START ---
# root
Object to use in design testing
- Path #:
- Model: JOD Test Object 2.0
- Brand: John OS
- Descr: This structure provide an object with basic pillars and structured examples.
- SubComps #: 4
- SubComps: [Group that contains status, Light example, Color Light example, Group that contains actions]
--- --------------- ---

obj-component (compPath)

Deprecated Executes a null action on 'compPath' Pillar.


Workers

TODO

abbrevnameparams
eaexec-activate()
edexec-deactivate()
elppexec-ls-puller-protos()
ellpexec-ls-listener-protos()
elepexec-ls-executor-protos()
elpexec-ls-pullers()
ellexec-ls-listeners()
eleexec-ls-executors()
eapexec-add-puller(name, name, proto, configStr)
erpexec-rm-puller(name)
eepexec-enable-puller(name)
edpexec-disable-puller(name)
erlexec-rm-listener(name)
ealexec-add-listener(type, name, proto, configStr)
eelexec-enable-listener(name)
edlexec-disable-listener(name)
eaeexec-add-executor(type, name, proto, configStr)
ereexec-rm-executor(name)
eeeexec-enable-executor(name)
edeexec-disable-executor(name)
eaeexec-action-executor(name)