2021-02-18 06:04:30 +01:00
# standard imports
import os
import logging
import argparse
import base64
2021-05-18 19:13:57 +02:00
# external imports
2021-02-18 06:04:30 +01:00
import confini
# local imports
from cic_cache . db import dsn_from_config
from cic_cache . db . models . base import SessionBase
2021-05-18 19:13:57 +02:00
from cic_cache . runnable . daemons . query import (
process_transactions_account_bloom ,
process_transactions_all_bloom ,
process_transactions_all_data ,
)
2021-02-18 06:04:30 +01:00
logging . basicConfig ( level = logging . WARNING )
logg = logging . getLogger ( )
rootdir = os . path . dirname ( os . path . dirname ( os . path . realpath ( __file__ ) ) )
dbdir = os . path . join ( rootdir , ' cic_cache ' , ' db ' )
migrationsdir = os . path . join ( dbdir , ' migrations ' )
config_dir = os . path . join ( ' /usr/local/etc/cic-cache ' )
argparser = argparse . ArgumentParser ( )
argparser . add_argument ( ' -c ' , type = str , default = config_dir , help = ' config file ' )
argparser . add_argument ( ' --env-prefix ' , default = os . environ . get ( ' CONFINI_ENV_PREFIX ' ) , dest = ' env_prefix ' , type = str , help = ' environment prefix for variables to overwrite configuration ' )
argparser . add_argument ( ' -v ' , action = ' store_true ' , help = ' be verbose ' )
argparser . add_argument ( ' -vv ' , action = ' store_true ' , help = ' be more verbose ' )
args = argparser . parse_args ( )
if args . vv :
logging . getLogger ( ) . setLevel ( logging . DEBUG )
elif args . v :
logging . getLogger ( ) . setLevel ( logging . INFO )
config = confini . Config ( args . c , args . env_prefix )
config . process ( )
config . censor ( ' PASSWORD ' , ' DATABASE ' )
config . censor ( ' PASSWORD ' , ' SSL ' )
logg . debug ( ' config: \n {} ' . format ( config ) )
dsn = dsn_from_config ( config )
SessionBase . connect ( dsn , config . true ( ' DATABASE_DEBUG ' ) )
# uwsgi application
def application ( env , start_response ) :
headers = [ ]
content = b ' '
session = SessionBase . create_session ( )
for handler in [
2021-05-18 19:13:57 +02:00
process_transactions_all_data ,
2021-02-18 06:04:30 +01:00
process_transactions_all_bloom ,
process_transactions_account_bloom ,
] :
2021-05-18 19:13:57 +02:00
r = None
try :
r = handler ( session , env )
except ValueError as e :
start_response ( ' 400 {} ' . format ( str ( e ) ) )
return [ ]
2021-02-18 06:04:30 +01:00
if r != None :
( mime_type , content ) = r
break
session . close ( )
headers . append ( ( ' Content-Length ' , str ( len ( content ) ) ) , )
headers . append ( ( ' Access-Control-Allow-Origin ' , ' * ' , ) ) ;
if len ( content ) == 0 :
headers . append ( ( ' Content-Type ' , ' text/plain, charset=UTF-8 ' , ) )
start_response ( ' 404 Looked everywhere, sorry ' , headers )
else :
headers . append ( ( ' Content-Type ' , mime_type , ) )
start_response ( ' 200 OK ' , headers )
return [ content ]