> On May 10, 2016, at 3:58 PM, Dan Debrunner <[email protected]> wrote:
> 
> So the control service allows execution of operations (method calls) against 
> registered control MBeans from outside a Quarks application.
> 
> Two implementation of the control service exist, JMX and JSON.
> 
> JmxControlService registers the MBeans within the platform JMX server thus 
> allowing standard JMX control (remote clients etc.)
> 
> JsonControlService registers the MBeans and allows a JSON control request 
> object to invoke an operation. The JSON object format is described (briefly) 
> in the package for the JsonControlService but its formatting was messed up so 
> it doesn't appear in the Javadoc (I'll fix that). The JSON control request 
> object is passed directly into the JsonControlService instance to invoke the 
> method.

Has this been fixed yet?  When I look at the javadoc for JsonControlService I 
see:

A JSON object passed to controlRequest 
<file:///Users/susancline/new_git/incubator-quarks/target/docs/javadoc/quarks/runtime/jsoncontrol/JsonControlService.html#controlRequest-com.google.gson.JsonObject->
 with these name/value pairs is handled as an operation resulting in a method 
call to a void method on a control service MBean interface. 
type=type - MBean type.
alias=alias - Alias of the MBean.
op=name - Name of the operation to invoke, this is the method name on the MBean.
arguments=optional list of arguments - Arguments passed to the operation 
(method).
Is this correct now?

> 
> Separately the IotProvider sets itself up so that an IoT device command with 
> command identifier `quarksControl' is sent to its JsonControlService. As long 
> as a MBean can be identified uniquely by a type and an alias the operation 
> will executed against that control MBean.
> 
> The command's data is the JSON control request, thus for example by sending a 
> device command with identifier `quarksControl` and data:
> 
> {"type":"appService","alias":"quarks","op":"submit","args":["Heartbeat",{}]}
> 
> Will result in this method being called against the MBean registered by the 
> ApplicationService to start the Heartbeat application.
> 
> ApplicationServiceMXBean.submit("Heartbeat", "{}")
> 
> Basically for the MBean of type 'appService' and alias 'quarks', call the 
> method 'op' with arguments 'Heartbeat' and an empty JSON object (there are 
> auto string<->json conversions).

I got this working!  I was able to start an application on a raspberry pi that 
emitted sensor readings from a remote command via IOTF.

> 
> "All Quarks applications" is somewhat hard to answer, since Quarks is an SDK 
> there can be simple quarks applications that don't use IoTDevice, Iotf, the 
> application or control services. But if Quarks applications are running in 
> the IotProvider framework then they will support a number of commands:
> - submit application
> - change job state (e.g. to stop a running job)
> - any application that registers PeriodMBean's with a unique alias can have 
> its period change (e.g. a periodic source). This will obviously be 
> application specific.
> 
>> For example I think I have heard about a “start” and “stop” application 
>> command.  Can someone tell me how these would work and if any other commands 
>> are available as
>> “standard” commands?
> 
> The start command is the command above to submit an application previously 
> registered with the application service.
> 
> I've just added a method to JobMXBean that will allow stopping a job now, and 
> maybe pause eventually.

Great, I will try stopping a job for now and see if I can get that to work.  
Thanks.

Reply via email to