Source code for snews_cs.__main__
#!/usr/bin/env python
"""
The command line tool for
- Running coincidence logic in the background
- Simulate data
- initiate slack bot
"""
import os
from pathlib import Path
from socket import gethostname
# https://click.palletsprojects.com/en/8.0.x/utils/
import click
from . import __version__, cs_utils
from . import snews_coinc as snews_coinc
from .database import Database
from .heartbeat_feedbacks import FeedBack
# Database initialized before any command is called
[docs]
db = Database(db_file_path=Path(__file__).parent.parent / "snews_cs.db")
db.initialize_database(sql_schema_path=Path(__file__).parent / "db_schema.sql")
@click.group(invoke_without_command=True)
@click.version_option(__version__)
@click.option('--env', type=str,
default='/etc/test-config.env',
show_default='etc/test-config.env',
help='environment file containing the configurations')
@click.pass_context
[docs]
def main(ctx, env):
""" User interface for snews_pt tools
"""
base = os.path.dirname(os.path.realpath(__file__))
env_path = base + env
ctx.ensure_object(dict)
cs_utils.set_env(env_path)
ctx.obj['env'] = env
@main.command()
@click.option('--firedrill/--no-firedrill', default=False, show_default='False', help='Whether to use firedrill brokers or default ones')
@click.option('--dropdb/--no-dropdb', default=True, show_default='True', help='Whether to drop the current database')
@click.option('--email/--no-email', default=True, show_default='True', help='Whether to send emails along with the alert')
@click.option('--slackbot/--no-slackbot', default=True, show_default='True', help='Whether to send the alert on slack')
[docs]
def run_coincidence(firedrill, dropdb, email, slackbot):
""" Initiate Coincidence Decider
"""
HOST = gethostname()
coinc = snews_coinc.CoincidenceDistributor(drop_db=dropdb,
firedrill_mode=firedrill,
server_tag=HOST,
send_email=email,
send_slack=slackbot)
try:
coinc.run_coincidence()
except KeyboardInterrupt:
pass
except Exception as e:
print(e)
finally:
click.secho(f'\n{"="*30}DONE{"="*30}', fg='white', bg='green')
@main.command()
@click.option('--verbose', '-v', default=False, show_default='False', help='Verbose print')
[docs]
def run_feedback(verbose):
""" Start the feedback checks
"""
feedback = FeedBack(verbose=verbose)
click.secho(f'\nInvoking Feedback search, verbose={verbose}\n', fg='white', bg='green')
feedback()
if __name__ == "__main__":
main()