Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
#Если файлик ранее выгружался, то пробуем получить из него данные
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.')
Ejemplo n.º 4
0
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.')
Ejemplo n.º 5
0
    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)