Téléchargement en utilisant la console

Ce bloc-notes jupyter présente l’utilisation de Sarracenia version 3 à partir de la ligne de commande (principalement avec Linux, mais devrait être similaire avec Windows et Mac, la principale différence étant des conventions différentes pour l’emplacement de stockage des préférences et des sorties d’éxécution. C’est probablement la façon la plus simple de travailler avec Sarracenia. Vous configurez un flux pour télécharger des fichiers dans un répertoire, et vous pouvez lire le répertoire pour y traiter les fichiers.

[ ]:
import sarracenia
!mkdir -p ~/.config/sr3/subscribe
!mkdir -p ~/.cache/sr3/log

Prérequis

Ce code qui précède n’est qu’un moyen d’obtenir des bloc-notes jupyter pour installer metpx-sr3 sur un serveur. Créer des répertoires au cas où les gens utiliseraient l’accès à l’API sans exécuter les choses via l’API. Le prérequis de base est d’avoir installé metpx-sr3 d’une manière ou d’une autre, soit en tant que package .deb, soit en utilisant pip (ou pip3) disponible pour l’environnement utilisé par jupyter.

Le reste de ce bloc-notes suppose que metpx-sr3 est installé.

SR3

L’interface de ligne de commande s’appelle sr3 (abréviation de Sarracenia version 3). On définit les flux à exécuter à l’aide de fichiers de configuration dans un format simple : format keyword value (mot clé, valeur). Voici des exemples de configurations pour vous aider à démarrer:

[3]:
!sr3 list examples
Sample Configurations: (from: /home/peter/Sarracenia/sr3/sarracenia/examples )
cpump/cno_trouble_f00.inc        poll/airnow.conf
poll/aws-nexrad.conf             poll/mail.conf
poll/nasa-mls-nrt.conf           poll/noaa.conf
poll/soapshc.conf                poll/usgs.conf
post/WMO_mesh_post.conf          sarra/wmo_mesh.conf
sender/ec2collab.conf            sender/pitcher_push.conf
shovel/no_trouble_f00.inc        subscribe/aws-nexrad.conf
subscribe/dd_2mqtt.conf          subscribe/dd_all.conf
subscribe/dd_amis.conf           subscribe/dd_aqhi.conf
subscribe/dd_cacn_bulletins.conf subscribe/dd_citypage.conf
subscribe/dd_cmml.conf           subscribe/dd_gdps.conf
subscribe/dd_radar.conf          subscribe/dd_rdps.conf
subscribe/dd_swob.conf           subscribe/ddc_cap-xml.conf
subscribe/ddc_normal.conf        subscribe/downloademail.conf
subscribe/ec_ninjo-a.conf        subscribe/hpfxWIS2DownloadAll.conf
subscribe/hpfx_amis.conf         subscribe/local_sub.conf
subscribe/ping.conf              subscribe/pitcher_pull.conf
subscribe/sci2ec.conf            subscribe/subnoaa.conf
subscribe/subsoapshc.conf        subscribe/subusgs.conf
sender/ec2collab.conf            sender/pitcher_push.conf
watch/master.conf                watch/pitcher_client.conf
watch/pitcher_server.conf        watch/sci2ec.conf

Il existe différents types de flux : les exemples sont classés selon le type de flux (poll, post, sarra, sender, shovel…) Un subscribe (abonnement) est utilisé par les clients pour télécharger à partir d’une pompe de données. Choisissons-en un.

[4]:
!sr3 add subscribe/hpfx_amis.conf
add: 2022-03-19 13:17:47,786 2724188 [INFO] sarracenia.sr add copying: /home/peter/Sarracenia/sr3/sarracenia/examples/subscribe/hpfx_amis.conf to /home/peter/.config/sr3/subscribe/hpfx_amis.conf

Les fichiers qui sont actifs pour vous sont placés dans ~/.config/sr3//config_name. Vous pouvez y naviguer et les modifier avec un éditeur si vous le souhaitez. Vous pouvez également le faire avec sr3 edit subscribe/hpfx_amis.conf

# this is a feed of wmo bulletin (a set called AMIS in the old times)

broker amqps://hpfx.collab.science.gc.ca/
exchange xpublic

# instances: number of downloading processes to run at once.  defaults to 1. Not enough for this case
instances 5

# expire, in operational use, should be longer than longest expected interruption
expire 10m

topic_prefix v02.post
subtopic *.WXO-DD.bulletins.alphanumeric.#
mirror false
directory /tmp/amis/
accept .*

ajouté messageCountMax, donc il ne s’exécute pas éternellement.

[6]:
!mkdir /tmp/amis
!echo messageCountMax 10 >>~/.config/sr3/subscribe/hpfx_amis.conf

Le répertoire racine où les fichiers doivent être placés doit exister avant de commencer. les commandes ci-dessus sont à configurer sur une machine Linux, vous pourriez avoir besoin d’autre chose sur un Mac ou Windows.

Vous pouvez ensuite exécuter un flux de manière interactive avec l’action foreground, et il se terminera rapidement, comme ceci:

[7]:
!sr3 foreground subscribe/hpfx_amis.conf
2022-03-19 13:18:34,230 2724487 [INFO] sarracenia.config fill_missing_options overriding batch for consistency with messageCountMax: 10
.2022-03-19 13:18:34,442 [INFO] 2724489 sarracenia.config fill_missing_options overriding batch for consistency with messageCountMax: 10
2022-03-19 13:18:34,444 [INFO] 2724489 sarracenia.config fill_missing_options overriding batch for consistency with messageCountMax: 10
2022-03-19 13:18:34,444 [INFO] 2724489 sarracenia.flow loadCallbacks plugins to load: ['sarracenia.flowcb.gather.message.Message', 'sarracenia.flowcb.retry.Retry', 'sarracenia.flowcb.housekeeping.resources.Resources', 'sarracenia.flowcb.log.Log']
2022-03-19 13:18:34,803 [INFO] 2724489 sarracenia.flowcb.log __init__ subscribe initialized with: {'on_housekeeping', 'after_accept', 'after_work'}
2022-03-19 13:18:34,803 [INFO] 2724489 sarracenia.flow run options:
_Config__admin="...st/ None True True False False None None",
_Config__broker="...ca/ None True True False False None None",
_Config__post_broker=None, accel_threshold=0, acceptSizeWrong=False,
acceptUnmatched=False, action='foreground', attempts=3, auto_delete=False,
baseDir=None, baseUrl_relPath=False, batch=10,
bindings="... ['*.WXO-DD.bulletins.alphanumeric.#'])]", bufsize=1048576,
bytes_per_second=None, bytes_ps=0,
cfg_run_dir="...me/peter/.cache/sr3/subscribe/hpfx_amis'",
component='subscribe', config='hpfx_amis.conf',
configurations=['subscribe/hpfx_amis.conf'], currentDir=None,
dangerWillRobinson=False, debug=False, declared_exchanges=[],
declared_users="...': 'source', 'eggmeister': 'subscriber'}", delete=False,
destfn_script=None, directory='/tmp/hpfx_amis/', discard=False,
documentRoot=None, download=True, durable=True,
env_declared="...OKER', 'MQP', 'SFTPUSER', 'TESTDOCROOT']", exchange='xpublic',
exchangeDeclare=True, expire=600.0, feeder=amqp://tfeed@localhost,
fileEvents={'delete', 'link', 'modify', 'create'}, filename='WHATFN',
fixed_headers={}, flatten='/', hostdir='fractal', hostname='fractal',
housekeeping=300, imports=[], inflight=None, inline=False,
inline_encoding='guess', inline_max=4096, inline_only=False, instances=5,
identity_arbitrary_value=None, identity_method='sha512',
logEvents="...ekeeping', 'after_accept', 'after_work'}",
logFormat="...me)s] %(name)s %(funcName)s %(message)s'", logLevel='info',
logStdout=False, log_flowcb_needed=False, lr_backupCount=5, lr_interval=1,
lr_when='midnight', masks="...pile('.*'), True, False, 0, False, '/')]",
messageAgeMax=0, messageCountMax=10, messageDebugDump=False, messageRateMax=0,
messageRateMin=0,
message_strategy="...ubborn': True, 'failure_duration': '5m'}", message_ttl=0,
mirror=False, no=0, fileAgeMax=0, nodupe_ttl=0, overwrite=True,
permCopy=True, permDefault=0, permDirDefault=509, permLog=384,
pid_filename="...e/hpfx_amis//subscribe_hpfx_amis_00.pid'", plugins_early=[],
plugins_late=['sarracenia.flowcb.log.Log'], post_baseDir=None,
post_baseUrl=None, post_documentRoot=None, post_exchanges=[],
post_topicPrefix=['v02', 'post'], prefetch=25, pstrip=False, queueBind=True,
queueDeclare=True, queueName="...s_subscribe.hpfx_amis.81537164.67226020'",
queue_filename="...mis/subscribe.hpfx_amis.anonymous.qname'", randid='2067',
randomize=False, realpathPost=False, rename=None, report_back=False,
reset=False, retry_path="...hpfx_amis//subscribe_hpfx_amis_00.retry'",
retry_ttl=600.0, settings={}, sleep=0.1, statehost=False, strip=0, subtopic=[],
timeCopy=True, timeout=300, timezone='UTC', tls_rigour='normal',
topicPrefix=['v02', 'post'], undeclared=[], users=False, v2plugin_options=[],
v2plugins={}, vhost='/', vip=None
2022-03-19 13:18:34,803 [INFO] 2724489 sarracenia.flow run callbacks loaded: ['sarracenia.flowcb.gather.message.Message', 'sarracenia.flowcb.retry.Retry', 'sarracenia.flowcb.housekeeping.resources.Resources', 'sarracenia.flowcb.log.Log']
2022-03-19 13:18:34,803 [INFO] 2724489 sarracenia.flow run pid: 2724489 subscribe/hpfx_amis.conf instance: 0
2022-03-19 13:18:35,043 [INFO] 2724489 sarracenia.flowcb.log after_accept accepted: (lag: 2.94 ) https://hpfx.collab.science.gc.ca /20220319/WXO-DD/bulletins/alphanumeric/20220319/SR/KWAL/17/SRCN40_KWAL_191718___39822
2022-03-19 13:18:35,221 [INFO] 2724489 sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SRCN40_KWAL_191718___39822
2022-03-19 13:18:36,276 [INFO] 2724489 sarracenia.flowcb.log after_accept accepted: (lag: 2.36 ) https://hpfx.collab.science.gc.ca /20220319/WXO-DD/bulletins/alphanumeric/20220319/SR/KWAL/17/SRWA20_KWAL_191718___44601
2022-03-19 13:18:36,398 [INFO] 2724489 sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SRWA20_KWAL_191718___44601
2022-03-19 13:18:40,766 [INFO] 2724489 sarracenia.flowcb.log after_accept accepted: (lag: 2.65 ) https://hpfx.collab.science.gc.ca /20220319/WXO-DD/bulletins/alphanumeric/20220319/SR/KWAL/17/SRCN40_KWAL_191718___38142
2022-03-19 13:18:40,766 [INFO] 2724489 sarracenia.flowcb.log after_accept accepted: (lag: 4.06 ) https://hpfx.collab.science.gc.ca /20220319/WXO-DD/bulletins/alphanumeric/20220319/SR/KWAL/17/SRMT60_KWAL_191718___7676
2022-03-19 13:18:40,766 [INFO] 2724489 sarracenia.flowcb.log after_accept accepted: (lag: 4.05 ) https://hpfx.collab.science.gc.ca /20220319/WXO-DD/bulletins/alphanumeric/20220319/SR/KWAL/17/SRCN40_KWAL_191718___30876
2022-03-19 13:18:40,766 [INFO] 2724489 sarracenia.flowcb.log after_accept accepted: (lag: 2.55 ) https://hpfx.collab.science.gc.ca /20220319/WXO-DD/bulletins/alphanumeric/20220319/SX/CWEG/17/SXCN03_CWEG_191700___24546
2022-03-19 13:18:40,766 [INFO] 2724489 sarracenia.flowcb.log after_accept accepted: (lag: 2.55 ) https://hpfx.collab.science.gc.ca /20220319/WXO-DD/bulletins/alphanumeric/20220319/SR/KWAL/17/SRND30_KWAL_191718___32815
2022-03-19 13:18:40,766 [INFO] 2724489 sarracenia.flowcb.log after_accept accepted: (lag: 1.64 ) https://hpfx.collab.science.gc.ca /20220319/WXO-DD/bulletins/alphanumeric/20220319/SX/KWAL/17/SXCN40_KWAL_191718___41131
2022-03-19 13:18:40,766 [INFO] 2724489 sarracenia.flowcb.log after_accept accepted: (lag: 0.94 ) https://hpfx.collab.science.gc.ca /20220319/WXO-DD/bulletins/alphanumeric/20220319/SR/KWAL/17/SRCN40_KWAL_191718___22785
2022-03-19 13:18:41,592 [INFO] 2724489 sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SRCN40_KWAL_191718___38142
2022-03-19 13:18:41,592 [INFO] 2724489 sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SRMT60_KWAL_191718___7676
2022-03-19 13:18:41,592 [INFO] 2724489 sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SRCN40_KWAL_191718___30876
2022-03-19 13:18:41,592 [INFO] 2724489 sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SXCN03_CWEG_191700___24546
2022-03-19 13:18:41,592 [INFO] 2724489 sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SRND30_KWAL_191718___32815
2022-03-19 13:18:41,592 [INFO] 2724489 sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SXCN40_KWAL_191718___41131
2022-03-19 13:18:41,592 [INFO] 2724489 sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SRCN40_KWAL_191718___22785
2022-03-19 13:18:41,611 [INFO] 2724489 sarracenia.flowcb.gather.message on_stop closing
2022-03-19 13:18:41,611 [INFO] 2724489 sarracenia.flow close flow/close completed cleanly pid: 2724489 subscribe/hpfx_amis.conf instance: 0

comme vous pouvez le voir, il a téléchargé cinq fichiers dans /tmp/amis. L’action foreground est destinée à aider au débogage, plutôt qu’aux opérations réelles.

[8]:
!sr3 status
2022-03-19 13:18:52,445 2724517 [INFO] sarracenia.config fill_missing_options overriding batch for consistency with messageCountMax: 10
status:
Component/Config                         State        Run  Miss   Exp Retry
----------------                         -----        ---  ----   --- -----
subscribe/hpfx_amis                      stopped        0     0     0     0
      total running configs:   0 ( processes: 0 missing: 0 stray: 0 )

Il y a 1 configuration dans votre liste. Vous pouvez en avoir des centaines. Les colonnes de droite indiquent le nombre d’instances dont vous disposez pour chaque configuration. Dans l’exemple ci-dessus, instances est défini sur 5, donc on s’attendrait à voir 5 instances en cours d’exécution lors de l’exécution. Vous pouvez démarrer une configuration spécifique avec _sr3 start subscribe/_ ou démarrer toutes les instances actives avec : *sr3 start

[ ]:
!sr3 log subscribe/hpfx_amis.conf
2022-03-19 13:18:58,254 2724529 [INFO] sarracenia.config fill_missing_options overriding batch for consistency with messageCountMax: 10
2022-03-19 11:10:07,282 [INFO] sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SOVX45_KWAL_191509___38991
2022-03-19 11:10:07,282 [INFO] sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SRCN40_KWAL_191509___52945
2022-03-19 11:10:07,282 [INFO] sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SXCN40_KWAL_191509___11643
2022-03-19 11:10:07,282 [INFO] sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SRCN40_KWAL_191509___30237
2022-03-19 11:10:07,738 [INFO] sarracenia.flowcb.log after_accept accepted: (lag: 12.03 ) https://hpfx.collab.science.gc.ca /20220319/WXO-DD/bulletins/alphanumeric/20220319/SO/KWNB/15/SOVD83_KWNB_191200_RRX__37893
2022-03-19 11:10:07,898 [INFO] sarracenia.flowcb.log after_work downloaded ok: /tmp/hpfx_amis/SOVD83_KWNB_191200_RRX__37893
2022-03-19 11:10:17,165 [INFO] root stop_signal signal 15 received
2022-03-19 11:10:18,562 [INFO] sarracenia.flow run clean stop from run loop
2022-03-19 11:10:18,577 [INFO] sarracenia.flowcb.gather.message on_stop closing
2022-03-19 11:10:18,577 [INFO] sarracenia.flow close flow/close completed cleanly pid: 2231352 subscribe/hpfx_amis instance: 1

Lors de l’exécution en arrière-plan, la sortie doit aller dans un fichier journal (sortie d’exécution). Comme nous n’avons exécuté ce fichier de configuration qu’au premier plan, demander à voir le journal imprime une erreur indiquant que le journal est manquant. Cela vous indique que les journaux se trouvent dans le répertoire ~/.cache/sr3/log. Les journaux peuvent être surveillés en temps réel avec des outils traditionnels tels que tail -f ou grep.

sr3 stop fait ce que vous pensez.

Les processus peuvent planter. Dans la sortie sr3 status ci-dessus, si le nombre de processus dans la colonne Run est inférieur à celui dans la colonne Exp (for Expected), cela signifie que certaines instances ont planté. Vous pouvez le réparer (démarrez simplement les instances manquantes) avec :

sr3 sanity - démarre les instances manquantes, tue également les parasites s’il en trouve.

Voilà, une introduction à l’exécution des configurations dans Sarracenia à partir de la ligne de commande.

Conclusion

Si tout ce que vous voulez faire est d’obtenir des données à partir d’une pompe de données en temps réel, utiliser l’interface de ligne de commande pour contrôler certains processus qui s’exécutent tout le temps, afin qu’ils vident les fichiers dans un certain répertoire est la méthode la plus simple.

Ce n’est pas très efficace cependant. Lorsque vous avez un grand nombre de fichiers sur lesquels travailler et que vous souhaitez un traitement à grande vitesse, il est préférable, dans le sens d’une charge CPU et d’E/S (I/O) réduite et en termes de vitesse de traitement d’avoir votre propre application informée de l’arrivée des fichiers, plutôt que de scanner un répertoire.

La façon la plus simple de le faire est d’ajouter des rappels à vos flux. Nous couvrirons cela ensuite.

[ ]: