Administration

Service operations

Start service

To start the service, use either the service command:

service perseo start

Or just the launch script:

/etc/init.d/perseo start

For testing purposes it might be interesting to launch the process directly without the service. That can be done executing the following command from the project root directory:

./bin/perseo

Take into account that when the process is executed manually the system configuration for the script is not loaded and the default configuration (in /opt/perseo/config.js) is used.

Stop service

To stop the service, use either the service command:

service perseo stop

Or just the launch script:

/etc/init.d/perseo stop

How to check service status

Checking the process is running

The status of the process can be retrieved using the service command:

service perseo status

It also can be checked with ps, using a filter with the command name:

ps -ef | grep "bin/perseo"

In both cases a result of 0 (echoing $?) indicates the process is supposed to be running, and an error otherwise.

Checking that the port is listening

The following command:

netstat -ntpl | grep 9090

can be used to check the process is listening in the appropriate port (provided the port is the standard 9090). The result should resemble this line:

tcp   0   0  0.0.0.0:1026     0.0.0.0:*   LISTEN   12179/node

Database aspects

Perseo FE uses MongoDB for persistence (have a look to the data models document for more detail regarding how the data in the DB is structured). Perseo FE supports both standalone and replica set configurations for the DB.

At startup time, Perseo tries to connect to CB. If this connection fails, then Perseo will decline to run and log a FATAL error pointing out the problem with DB.

At runtime the connection to DB is managed by the driver. The driver keeps a buffer of operations waiting for connection. There is a limit for that buffer, established by the checkDB.bufferMaxEntries configuration parameter. Thus, if a connection problem persist, then the buffer size will eventually overpass the limit (all the operations waiting in the buffer will result in error in this case). In addition, an DB alarm at ERROR level is traced in the logs.

Moreover, in standalone mode (and not in replica set mode) the driver also use a couple of parameters: checkDB.reconnectTries and checkDB.reconnectInterval to manage DB connections retries in the case of connection problems. If the connection to the server fails in this case, then the driver will try to reconnect as many times as reconnectTries, waiting reconnectInterval between attemps. Overpassed the limit, Perseo will end with FATAL error log in the traces (as it does when connection fails at startup time).

Finally, note that perseo does periodical pings to DB in order to check if it is active. The pinging period is configured with the checkDB.delay parameter. This is a measure to "stimulate" the connection with DB and early discover possible connection problems. Even in the case of no other operations (i.e. Perseo is idle) the ping will accumulate in the buffer, eventually overpassing checkDB.bufferMaxEntries and raising the DB alarm.

In a DB alarm situation, the ping operation also allows to release the alarm, once the DB connection is OK again.

The different configuration parameters introduced above are described also in the Administrator Guide.

How to subscribe to Context Broker

(Orion has detailed documentation) In the example below,

  • ‘reference’ should be the perseo's IP and port
  • ‘condValues’ a list of the attributes of the entity used in rules. In a future release of Orion (Context Broker) will be possible to subscribe to changes in any attribute, but in the current version, they must be specified
  • 'orion-machine:1026' should be substituted by the actual Context Broker's IP and port
  • 'service' is the service associated to the subscription
  • 'subservice' is the subservice associated to the subscription
(curl http://orion-machine:1026/v2/subscriptions -s -S --header 'Content-Type: application/json' --header 'Fiware-Service: service' –header 'Fiware-ServicePath: subservice' -d @- | python -mjson.tool) <<EOF
{
  "description": "Subscription to feed the CEP",
  "subject": {
    "entities": [
      {
        "idPattern": ".*",
        "type": "BloodMeter"
      }
    ],
    "condition": {
      "attrs": [ ]
    }
  },
  "notification": {
    "http": {
      "url": "http://perseo-machine:9090/notices"
    },
    "attrs": [
      "BloodPressure"
    ]
  }
}
EOF