Funzionamento del service

Esistono due modalità di funzionamento del service: - una modalità attiva, a «chiamata» (il service viene attivato manualmente al fine di innescare una specifica azione) - una modalità passiva, in «ascolto» (il service è sempre attivo e in ascolto, e può compiere delle azioni in automatico)

Modalità attiva: getService

Il service può essere attivato tramite una chiamata al server di tipo Rpc. Sarà innanzitutto necessario individuare il service con il metodo getService, fornendogli (anche implicitamente) il service_name e facoltativamente il service_type. A quel punto sarà possibile chiamare un qualsiasi metodo contenuto nella classe Main del service. Ad esempio:

service = self.db.application.site.getService(service_name=service_name, service_type=service_type)
          assert service,'set in siteconfig the service'
          result = service.publishPost(title=title, message=message, image=image, api_token=api_token)
          if result:
              print('***POST RESULT: ', result)
              return result

In questo caso stiamo chiamando il metodo PublishPost fornendogli come parametri title, message, image e api_token.

Modalità passiva: gnrserviceworker

Il gnrserviceworker è un processo che è di default attivato sui service in produzione che prevede il lancio di tutti i service previsti nell’istanza.

Questo processo può essere utile per avere service in costante ascolto di eventi, al fine di fornire risposte automatiche o innescare processi. Lo script effettuerà la ricerca di file .py da avviare all’interno di tutte le cartelle lib > services e si occuperà automaticamente del lancio dei servizi stessi.

Un esempio potrebbe essere il service Telegram del package Genrobot .

È possibile lanciare lo script anche in locale. Per fare questo, a gnrdaemon attivato, aprire una nuova finestra del terminale e lanciare il comando:

gnrserviceworker instance.package.servicetype.servicename

Quindi, ad esempio, per avviare genrobot sull’istanza sandboxpg:

gnrserviceworker sandboxpg.genrobot.telegram.telegram

Il prerequisito sarà chiaramente l’aggiunta del package Genrobot all’istanza Sandbox

Autore della sezione: Davide Paci