11#!/usr/bin/env python3
2- import os
32
4- import uvloop
3+ # should be called before everything else
4+ def init_uvloop ():
5+ import uvloop
6+ uvloop .install ()
57
6- uvloop . install ()
8+ init_uvloop ()
79
10+ import os
811from proxy_py import settings
912from processor import Processor
1013from server .proxy_provider_server import ProxyProviderServer
1114from statistics import statistics
1215from checkers .base_checker import BaseChecker
1316from tools import test_collector
14-
1517import materialized_view_updater
1618import asyncio
1719import logging
2022import sys
2123
2224
23-
2425test_collector_path = None
2526main_logger = None
2627
@@ -37,11 +38,13 @@ def str_to_bool(value):
3738 raise argparse .ArgumentTypeError ("Boolean value expected." )
3839
3940 cmd_parser = argparse .ArgumentParser ()
40- cmd_parser .add_argument ("--debug" , type = str_to_bool , help = "override settings' debug value" )
41+ cmd_parser .add_argument ("--debug" , type = str_to_bool ,
42+ help = "override settings' debug value" )
4143 cmd_parser .add_argument (
42- "--proxy-checking-timeout" , type = float , help = "override settings' proxy checking timeout"
43- )
44- cmd_parser .add_argument ("--test-collector" , help = "test collector with a given path" )
44+ "--proxy-checking-timeout" , type = float , help = "override settings' proxy checking timeout"
45+ )
46+ cmd_parser .add_argument (
47+ "--test-collector" , help = "test collector with a given path" )
4548
4649 args = cmd_parser .parse_args ()
4750
@@ -61,36 +64,22 @@ def prepare_loggers():
6164 global main_logger
6265
6366 asyncio_logger = logging .getLogger ("asyncio" )
64- asyncio_logger_file_handler = logging .FileHandler ("logs/asyncio.log" )
65- asyncio_logger_file_handler .setLevel (logging .DEBUG )
66- asyncio_logger_file_handler .setFormatter (
67- logging .Formatter (
68- "%(levelname)s ~ %(asctime)s ~ %(funcName)30s() - %(message)s"
69- )
67+ asyncio_logger .setLevel (logging .DEBUG if settings .DEBUG else logging .INFO )
68+ asyncio_logger_handler = logging .StreamHandler (sys .stdout )
69+ asyncio_logger_handler .setLevel (logging .DEBUG if settings .DEBUG else logging .INFO )
70+ asyncio_logger_handler .setFormatter (
71+ logging .Formatter (settings .LOG_FORMAT_STRING )
7072 )
71- asyncio_logger .addHandler (asyncio_logger_file_handler )
72-
73- if settings .DEBUG :
74- asyncio .get_event_loop ().set_debug (True )
75-
76- asyncio_logger .setLevel (logging .DEBUG )
73+ asyncio_logger .addHandler (asyncio_logger_handler )
74+ asyncio .get_event_loop ().set_debug (settings .DEBUG )
7775
7876 main_logger = logging .getLogger ("proxy_py/main" )
79-
80- if settings .DEBUG :
81- main_logger .setLevel (logging .DEBUG )
82- else :
83- main_logger .setLevel (logging .INFO )
84-
85- logger_file_handler = logging .FileHandler ("logs/main.log" )
86- logger_file_handler .setLevel (logging .DEBUG )
87- logger_file_handler .setFormatter (
88- logging .Formatter (
89- "%(levelname)s ~ %(asctime)s ~ %(funcName)30s() ~ %(message)s"
90- )
91- )
92-
93- main_logger .addHandler (logger_file_handler )
77+ main_logger .setLevel (logging .DEBUG if settings .DEBUG else logging .INFO )
78+ logger_handler = logging .StreamHandler (sys .stdout )
79+ logger_handler .setFormatter (logging .Formatter (settings .LOG_FORMAT_STRING ))
80+ logger_handler .setLevel (logging .DEBUG if settings .DEBUG else logging .INFO )
81+
82+ main_logger .addHandler (logger_handler )
9483
9584
9685async def core ():
@@ -108,7 +97,7 @@ async def core():
10897 proxy_processor .worker (),
10998 statistics .worker (),
11099 materialized_view_updater .worker (),
111- ])
100+ ])
112101 BaseChecker .clean ()
113102 return code
114103 except KeyboardInterrupt :
@@ -123,13 +112,29 @@ async def core():
123112
124113def server ():
125114 proxy_provider_server = ProxyProviderServer (
126- settings .PROXY_PROVIDER_SERVER_ADDRESS ['HOST' ],
127- settings .PROXY_PROVIDER_SERVER_ADDRESS ['PORT' ],
128- )
115+ settings .PROXY_PROVIDER_SERVER_ADDRESS ['HOST' ],
116+ settings .PROXY_PROVIDER_SERVER_ADDRESS ['PORT' ],
117+ )
129118
130119 return proxy_provider_server .start (asyncio .get_event_loop ())
131120
132121
122+ def print_help ():
123+ print ("""Usage: ./main.py [COMMAND] [OPTION]...
124+ Runs proxy_py
125+
126+ The commands are:
127+
128+ "core" - runs core part of the project (proxies parsing and processing)
129+ "server" - runs server for providing API
130+ "" - runs both
131+
132+ use ./main.py COMMAND --help to get more information
133+
134+ Project's page: https://github.com/DevAlone/proxy_py
135+ """ )
136+
137+
133138def main ():
134139 if len (sys .argv ) < 2 :
135140 # run default configuration
@@ -143,10 +148,14 @@ def main():
143148
144149 command = sys .argv [1 ].strip ()
145150 sys .argv = sys .argv [1 :]
146- return {
147- 'core' : lambda : asyncio .get_event_loop ().run_until_complete (core ()),
148- 'server' : server ,
149- }[command ]()
151+ try :
152+ return {
153+ 'core' : lambda : asyncio .get_event_loop ().run_until_complete (core ()),
154+ 'server' : server ,
155+ }[command ]()
156+ except KeyError :
157+ print_help ()
158+ return 0
150159
151160
152161if __name__ == "__main__" :
0 commit comments