def __init__(self, transact, cfg): self.path_py = str(os.path.dirname(os.path.abspath(__file__))) self.transact = transact self.session = ZapretInfo() self.update_dump = self.session.getLastDumpDateEx() self.cfg = cfg self.code = None self.code_id = None
#Если файлик ранее выгружался, то пробуем получить из него данные dt = datetime.strptime( ElementTree().parse("dump.xml").attrib['updateTime'][:19], '%Y-%m-%dT%H:%M:%S') updateTime = int(time.mktime(dt.timetuple())) try: dt = datetime.strptime( ElementTree().parse("dump.xml").attrib['updateTimeUrgently'][:19], '%Y-%m-%dT%H:%M:%S') updateTimeUrgently = int(time.mktime(dt.timetuple())) except: updateTimeUrgently = 0 fromFile = max(updateTime, updateTimeUrgently) opener = ZapretInfo() #Проверяем, изменился ли файлик if max(opener.getLastDumpDateEx().lastDumpDate, opener.getLastDumpDateEx().lastDumpDateUrgently) / 1000 <> fromFile: #Файлик изменился. Отправляем запрос на выгрузку request = opener.sendRequest(XML_FILE_NAME, P7S_FILE_NAME) #Проверяем, принят ли запрос к обработке if request['result']: #Запрос не принят, получен код code = request['code'] print 'Got code %s' % (code) print 'Trying to get result...' while 1: #Пытаемся получить архив по коду request = opener.getResult(code)
def main(): session = ZapretInfo() if args.time: last_dump = session.getLastDumpDateEx() last_dump_date = max(last_dump.lastDumpDate, last_dump.lastDumpDateUrgently) / 1000 print last_dump_date else: logging.basicConfig(filename=LOG_FILE_NAME, filemode='a', format=u'%(asctime)s %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) logger.info('Starting script.') if not XML_FILE_NAME: logging.error('No XML file.') print 'No XML file.' parser.usage() return if not P7S_FILE_NAME: logging.error('No signature file.') print 'No signature file.' parser.usage() return try: os.mkdir(args.dir) except OSError: pass logger.info('Check if dump.xml already exists.') if os.path.exists('dump.xml'): logger.info('dump.xml already exists.') data = ElementTree().parse("dump.xml") dt = datetime.strptime(data.attrib['updateTime'][:19], '%Y-%m-%dT%H:%M:%S') updateTime = int(time.mktime(dt.timetuple())) logger.info('Got updateTime: %s.', updateTime) dt = datetime.strptime(data.attrib['updateTimeUrgently'][:19], '%Y-%m-%dT%H:%M:%S') updateTimeUrgently = int(time.mktime(dt.timetuple())) logger.info('Got updateTimeUrgently: %s.', updateTimeUrgently) fromFile = max(updateTime, updateTimeUrgently) logger.info('Got latest update time: %s.', fromFile) else: logger.info('dump.xml does not exist') fromFile = 0 logger.info('Check if dump.xml has updates since last sync.') last_dump = session.getLastDumpDateEx() logger.info('Current versions: webservice: %s, dump: %s, doc: %s', last_dump.webServiceVersion, last_dump.dumpFormatVersion, last_dump.docVersion) if max(last_dump.lastDumpDate, last_dump.lastDumpDateUrgently) / \ 1000 != fromFile: logger.info('New dump is available.') logger.info('Sending request.') request = session.sendRequest(XML_FILE_NAME, P7S_FILE_NAME, '2.2') logger.info('Checking request status.') if request['result']: code = request['code'] logger.info('Got code %s', code) logger.info('Waiting for a minute...') time.sleep(60) while True: logger.info('Trying to get result...') request = session.getResult(code) if request['result']: logger.info('Got a dump ver. %s for the %s (INN %s)', request['dumpFormatVersion'], request['operatorName'].decode('utf-8'), request['inn']) with open('result.zip', "wb") as f: f.write(b64decode(request['registerZipArchive'])) logger.info( 'Downloaded dump %d bytes, MD5 hashsum: %s', os.path.getsize('result.zip'), hashlib.md5(open('result.zip', 'rb').read()).hexdigest()) try: logger.info('Unpacking.') zip_file = zipfile.ZipFile('result.zip', 'r') zip_file.extract('dump.xml', '') if not args.no_archives: zip_file.extractall( '%s/%s' % (args.dir, datetime.now().strftime( "%Y-%m-%dT%H-%M-%S"))) zip_file.close() except zipfile.BadZipfile: logger.error('Wrong file format.') break else: if request['resultCode'] == 0: logger.info('Not ready yet. Waiting for a minute.') time.sleep(60) else: logger.error( 'Got an error, code %d: %s', request['resultCode'], request['resultComment'].decode('utf-8')) break else: logger.error(request['resultComment'].decode('utf-8')) else: logger.info('No updates.') logger.info('Script stopped.')
def main(): parser = argparse.ArgumentParser( add_help=True, description= 'Tool for list of restricted websites http://vigruzki.rkn.gov.ru/') parser.add_argument("--url", action="store_true", required=False, default=False, help="url list show") parser.add_argument("--ip", action="store_true", required=False, default=False, help="ip list show") parser.add_argument("--domain", action="store_true", required=False, default=False, help="domain list show") parser.add_argument("--history", action="store_true", required=False, default=False, help="history list show") parser.add_argument("-v", "--version", action='version', version='version 1.2.5', help="show version") args = parser.parse_args() ip_print = args.ip url_print = args.url domain_print = args.domain history_print = args.history cfg = Config() if cfg.LogRewrite(): filemode = 'w' else: filemode = 'a' logging.basicConfig(filename=cfg.LogPathFName(), filemode=filemode, format=u'%(asctime)s %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) logger.info('Starting script.') init_dump_db(logger, cfg) if ip_print: ip_show() elif url_print: url_show() elif domain_print: domain_show() elif history_print: history_show() else: session = ZapretInfo() upd_dump = session.getLastDumpDateEx() srv_msg = check_service_upd(logger, upd_dump) if srv_msg: if cfg.Notify(): notify(logger, srv_msg, cfg, subject='vigruzki.rkn.gov.ru service update') if check_new_dump(logger, upd_dump): if cfg.GenRequest(): gen_request(logger, cfg) sign_request(logger, cfg) code = send_request(logger, session, cfg.XMLPathFName(), cfg.P7SPathFName(), '2.2') if code: if get_request(logger, session, code, cfg): result_bool, message = parse_dump(logger) if result_bool == 1: if cfg.Notify(): notify(logger, message, cfg) elif result_bool == 2: logger.info('No updates') elif result_bool == 0: if cfg.Notify(): message = 'Houston, we have a problem' notify(logger, message, cfg) logger.info('parse_dump error') logger.info('Script stopped.')
def run(self): checker = rknChecker(self.settings) logging.info ("Last dump have a time: %s", checker.getDumpDate()); request = rknRequestXML(checker.OPERATOR_NAME, checker.OPERATOR_INN, checker.OPERATOR_OGRN, checker.OPERATOR_EMAIL, 'Europe/Moscow' ) request.generate(self.workdir+'request.xml'); while True: rkndump = ZapretInfo() DumpDate = rkndump.getLastDumpDate() # Dump timestamp in msec DumpDateUrgently = rkndump.getLastDumpDateEx() # Urgently Dump timestamp im msec WebServiceVersion = rkndump.getWebServiceVersion() # Web-service string "X.Y" DumpFormatVersion = rkndump.getDumpFormatVersion() # Dump format version string "X.Y" DocVersion = rkndump.getDocVersion() # Doc version string "X.Y" localdump = rknDump(self.workdir); LocalDumpDate = localdump.getUpdateTime() LocalDumpDateUrgently = localdump.getUpdateTimeUrgently() deltaDumpDate = DumpDate/1000 - LocalDumpDate deltaDumpDateUrgently = DumpDateUrgently/1000 - LocalDumpDateUrgently self.rknlog.info("Dump date:\t\t%s [local: %s, deltas: %s ]" % (datetime.datetime.fromtimestamp(DumpDate/1000), datetime.datetime.fromtimestamp(LocalDumpDate), sec2hr(deltaDumpDate) )) self.rknlog.info("Dump date urgently:\t%s [local: %s, deltas: %s ]" % (datetime.datetime.fromtimestamp(DumpDateUrgently/1000), datetime.datetime.fromtimestamp(LocalDumpDateUrgently), sec2hr(deltaDumpDateUrgently) )) self.rknlog.info("Web Service Version:\t\t%s [local: %s]" % (WebServiceVersion, localdump.getWebServiceVersion())) self.rknlog.info("Dump Format Version:\t\t%s [local: %s]" % (DumpFormatVersion, localdump.getDumpFormatVersion())) self.rknlog.info("Operator's Doc Version:\t%s [local: %s]" % (DocVersion, localdump.getDocVersion()) ) #if (deltaDumpDateUrgently <> 0): self.rknlog.info("Need urgently update") # os.system("/home/cmd4jazz/roskomnadzor/download.sh") #if (deltaDumpDate >= 24*60*60 ): self.rknlog.info("Need daily update") #os.system("/home/cmd4jazz/roskomnadzor/download.sh") #if (WebServiceVersion > localdump.getWebServiceVersion()): self.rknlog.info("New Version of Web Service") #localdump.setWebServiceVersion(WebServiceVersion) #if (DumpFormatVersion > localdump.getDumpFormatVersion()): self.rknlog.info("New Version of Dump Format") #localdump.setDumpFormatVersion(DumpFormatVersion) #if (DocVersion > localdump.getDocVersion()): self.rknlog.info("New Version of Operator's Doc Version") #localdump.setDocVersion(DocVersion) #os.system("wget -c http://vigruzki.rkn.gov.ru/docs/description_for_operators_actual.pdf -O /home/cmd4jazz/roskomnadzor/dump/doc-"+DocVersion+".pdf" # " -o /home/cmd4jazz/roskomnadzor/dump/doc-"+DocVersion+".log") #message = "New documentation for RosKomNadzor Servise is available ( version "+DocVersion+")\nHave fun!\n---\nrkn-support"; #mailnotify.sendemail ("New version of RKN service", message, "/home/cmd4jazz/roskomnadzor/dump/doc-"+DocVersion+".pdf") time.sleep (self.refresh*60) self.rknlog.info ("="*100)