Skjerm- og kontrollprogrammer Bruke veileder Del 2

I den første delen av denne todelte opplæringsserien så vi å sette opp og kontrollere Supervisor for å jobbe med våre webprogrammer. I denne delen vil vi se hvordan vi kan styre Supervisor-prosesser eksternt via programmet XML-RPC.

Starter

I den forrige delen så vi at veileder gir en nettbasert GUI som tillater oss å styre prosessene eksternt ved hjelp av noen få klikk. Nedenfor er et skjermbilde av denne GUI for programmet vi opprettet i forrige del:

Et spørsmål begynner umiddelbart å ringe i hjernen. Hva om det var mulig å kontrollere veilederprosessene programmatisk? Dette vil åpne opp mange muligheter der prosesser kan startes eller stoppes betinget i stedet for at de kjører på ubestemt tid eller kontrollerer dem manuelt ved å klikke på knapper eller kjører terminalkommandoer. Dette er veldig mulig ved hjelp av XML-RPC API gitt av Supervisor.

XML-RPC API

API-en selv er ganske enkel og enkel å bruke. Vi så at HTTP-serveren for Supervisor kjører på port 9001 som standard. Det samme kan brukes til å koble til ved hjelp av et XML-RPC-bibliotek. I tilfelle av Python kan vi bare bruke den innebygde xmlrpclib. Forutsatt at Supervisor-serveren kjører på http: // localhost: 9001 /:

>>> import xmlrpclib >>> server = xmlrpclib.Server ('http: // localhost: 9001 / RPC2')

For å sjekke den nåværende tilstanden til Supervisor-serveren, kjør:

>>> server.supervisor.getState () 'statename': 'RUNNING', 'statecode': 1

Serverdemonen kan startes på nytt og stoppes av:

>>> server.supervisor.restart () >>> server.supervisor.shutdown ()

På samme måte kan listen over alle tilgjengelige metoder hentes av:

>>> server.system.listMethods ()

API-referansen som er gitt i veilederens dokumentasjon, er ganske ren og selvforklarende. Går videre i denne opplæringen, vil jeg dekke et eksempel på hvordan man styrer prosessene basert på en tilstand, og også hvordan vi kan utvide denne API for å implementere egne metoder.

Kontrollerende prosesser ved hjelp av API

La oss si at vi vil starte en ny prosess for å sende en e-post hver gang en handling utføres av noen bruker. (Det er mange måter å gjøre dette på, og kanskje dette er ikke det beste, men jeg bruker det bare som et eksempel for å demonstrere dette). La oss si navnet på denne prosessen som definert i supervisord.conf er send_mail.

hvis user.action_performed: server.supervisor.startProcess ('send_email')

På samme måte kan vi også utløse automatisk omstart av supervisord server daemon hvis vi har en kodeendring i vår søknad.

hvis app.code_change (): server.supervisor.restart ()

Denne API kan også brukes på utallige slike tilfeller. 

Utvide XML-RPC API

Vi kan ikke bare bruke standard API-metodene som leveres av veileder, men også skrive våre egne metoder, og utvide API-en ved hjelp av XML-RPC-grensesnittfabrikkene. Dette kan enkelt gjøres ved å legge til en ny [Rpcinterface: x] delen i supervisord.conf.

[rpcinterface: tilpasset] supervisor.rpcinterface_factory = my_interface: make_custom_rpcinterface

Nå skal jeg lage et lite tilpasset grensesnitt for det samme i en fil som heter my_interface.py.

fra supervisor.rpcinterface import SupervisorNamespaceRPCInterface class CustomRPCInterface: def __init __ (selvtillit, veiledning): self.supervisord = supervisord self.retries = 3 def startProcessOrRetry (selv, navn, vent = True): interface = SupervisorNamespaceRPCInterface (self.supervisord) retry = 0 mens ikke interface.startProcess (navn) eller prøv igjen < self.retries: retry = retry + 1 # this is not used in code but referenced via an entry point in the conf file def make_custom_rpcinterface(supervisord): return CustomRPCInterface(supervisord)

Ovenfor har jeg opprettet en metode som, når den blir ringet, vil prøveprosessen tre ganger i tilfelle det ikke starter.

Konklusjon

I denne opplæringsserien lærte vi å bruke veileder til å overvåke og kontrollere våre applikasjoner. Vi så også hvordan vi kan bruke webgrensesnittet og XML-RPC-grensesnittet for det samme. Endelig er XML-RPC-grensesnittet utvidet for å utnytte styrkenes styrke til vår fordel.