Beispiel #1
0
    def execute(self, connector, process_action):
        logger = Logger(connector, self)
        job_name = process_action['job_name']

        process_repository = ProcessRepository(connector)
        process_property_repository = ProcessPropertyRepository(connector)

        file_repository = FileRepository(connector)

        process = process_repository.find_by_id(process_action['pcs_id'])
        file_id = process_property_repository.get_property(process, 'file_id')

        file = file_repository.find_by_id(file_id)

        pickup_location = process_property_repository.get_property(
            process, 'pickup_location')
        pickup_filename = file['filename']
        pickup_path = process_property_repository.get_property(process, 'path')

        logger.info(
            job_name, 'filename: ' + pickup_filename + ", pickup_location: " +
            pickup_location)

        # copy the file from pickup folder to the tmp folder.
        pickup_client = VfsFactory.create_client(pickup_location)
        pickup_client.connect()
        pickup_path = pickup_path + os.sep + pickup_filename
        pickup_client.delete(pickup_path)
        pickup_client.close()

        # set the process properties for the next process_action
        process_property_repository.set_property(process, 'pickup_location',
                                                 '')
        process_property_repository.set_property(process, 'path', '')
Beispiel #2
0
    def execute(self, connector, process_action):
        logger = Logger(connector, self)
        job_name = process_action['job_name']

        file_repository = FileRepository(connector)
        process_repository = ProcessRepository(connector)
        process_property_repository = ProcessPropertyRepository(connector)
        process_action_property_repository = ProcessActionPropertyRepository(connector)

        # retrieve the process properties
        process = process_repository.find_by_id(process_action['pcs_id'])
        file_id = process_property_repository.get_property(process, 'file_id')
        message = process_property_repository.get_property(process, 'message')
        backtrace = process_property_repository.get_property(process, 'backtrace')

        file = file_repository.find_by_id(file_id)
        filename = file['filename']

        state = process_action_property_repository.get_property(process_action, 'state')
        if not state:
            state = process_property_repository.get_property(process, 'state')
            if not state:
                state = 'ERROR_NO_STATE'

        file['state'] = state
        file['message'] = message
        file['backtrace'] = backtrace
        file_repository.state(file)

        logger.info(job_name, "filename: " + filename + ", state: " + file['state'])
Beispiel #3
0
    def execute(self, connector, process_action):
        logger = Logger(connector, self)
        job_name = process_action['job_name']

        # create instances of classes
        file_property_repository = FilePropertyRepository(connector)
        file_repository = FileRepository(connector)
        process_repository = ProcessRepository(connector)
        process_property_repository = ProcessPropertyRepository(connector)
        process_action_property_repository = ProcessActionPropertyRepository(
            connector)

        # retrieve the required properties
        process = process_repository.find_by_id(process_action['pcs_id'])
        file_id = process_property_repository.get_property(process, 'file_id')
        name = process_action_property_repository.get_property(
            process_action, 'name')
        value = process_action_property_repository.get_property(
            process_action, 'value')

        # get the file using the file_id we collected
        file = file_repository.find_by_id(file_id)
        filename = file['filename']

        file_property_repository.set_property(file, name, value)

        logger.info(
            job_name,
            "filename: " + filename + ", name: " + name + ", value: " + value)
Beispiel #4
0
    def execute(self, connector, process_action):
        logger = Logger(connector, self)
        job_name = process_action['job_name']

        properties = PropertyRepository(connector)
        process_repository = ProcessRepository(connector)
        process_property_repository = ProcessPropertyRepository(connector)
        process_action_property_repository = ProcessActionPropertyRepository(
            connector)

        file_repository = FileRepository(connector)

        process = process_repository.find_by_id(process_action['pcs_id'])
        file_id = process_property_repository.get_property(process, 'file_id')

        file = file_repository.find_by_id(file_id)

        tmp = properties.get_property('scanner.tmp')

        # retrieve the file properties
        pickup_location = process_property_repository.get_property(
            process, 'pickup_location')
        pickup_filename = file['filename']
        pickup_path = process_property_repository.get_property(process, 'path')
        drop_location = process_action_property_repository.get_property(
            process_action, 'drop_location')

        logger.info(
            job_name, 'filename: ' + pickup_filename + ", pickup_location: " +
            pickup_location + ", drop_location: " + drop_location)

        # copy the file from pickup folder to the tmp folder.
        pickup_client = VfsFactory.create_client(pickup_location)
        pickup_client.connect()
        pickup_path = pickup_path + os.sep + pickup_filename
        tmp_path = tmp + os.sep + pickup_filename
        pickup_client.get(pickup_path, tmp_path)
        pickup_client.close()

        # copy the file form the tmp folder to the drop folder.
        drop_client = VfsFactory.create_client(drop_location)
        drop_client.connect()
        property_path = drop_client.get_path()
        drop_path = drop_client.get_path() + os.sep + pickup_filename
        drop_client.put(tmp_path, drop_path)
        drop_client.close()

        # set the process properties for the next process_action
        process_property_repository.set_property(process, 'pickup_location',
                                                 drop_location)
        process_property_repository.set_property(process, 'path',
                                                 property_path)
Beispiel #5
0
    def execute(self, connector, process_action):

        job_name = process_action['job_name']
        logger = Logger(connector, self)
        file_repository = FileRepository(connector)
        process_repository = ProcessRepository(connector)
        process_property_repository = ProcessPropertyRepository(connector)

        # retrieve the file properties
        process = process_repository.find_by_id(process_action['pcs_id'])
        file_id = process_property_repository.get_property(process, 'file_id')
        file = file_repository.find_by_id(file_id)
        filename = file['filename']

        locked = file_repository.locked(file)

        if locked:
            logger.info(job_name, 'file: ' + filename + " locked ")
            return process_action
        else:
            logger.info(job_name, 'file: ' + filename + " not locked ")

        logger.info(job_name, filename + " state: " + file['state'])
Beispiel #6
0
    def execute(self, connector, process_action):
        logger = Logger(connector, self)
        job_name = process_action['job_name']

        file_repository = FileRepository(connector)
        process_repository = ProcessRepository(connector)
        process_property_repository = ProcessPropertyRepository(connector)
        process_action_property_repository = ProcessActionPropertyRepository(
            connector)

        # retrieve the file properties
        process = process_repository.find_by_id(process_action['pcs_id'])

        payload = process_property_repository.get_property(process, 'payload')
        if payload:
            payload = json.loads(payload)

        datasource = process_action_property_repository.get_property(
            process_action, 'datasource')
        method_name = process_action_property_repository.get_property(
            process_action, 'method_name')
        params = process_action_property_repository.get_property(
            process_action, 'params')
        test_result_params = process_action_property_repository.get_property(
            process_action, 'test_result_params')
        if params:
            params = json.loads(params)
            params = ExpressionParser.parse(params, locals())

        oracle_ds = DatasourceBuilder.find(connector, datasource)
        oracle_c = ConnectorFactory.create_connector(oracle_ds)
        scheduler = OracleScheduler(oracle_c)

        identifier = job_name + '_' + Strings.identifier(10)

        message = dict()
        message['method_name'] = method_name
        message['identifier'] = identifier
        message['params'] = params
        if test_result_params:
            message['test_result_params'] = json.loads(test_result_params)
        scheduler.create_job(message)

        logger.info(job_name, json.dumps(message))

        process_property_repository.set_property(process, 'identifier',
                                                 identifier)
        oracle_c.close()
Beispiel #7
0
    def execute(self, process_action):

        job_name = process_action['job_name']

        paprika_ds = DatasourceBuilder.build('paprika-ds.json')
        logger = Logger(self)
        file_repository = FileRepository(paprika_ds)
        process_repository = ProcessRepository(paprika_ds)
        process_property_repository = ProcessPropertyRepository(paprika_ds)
        process_action_property_repository = ProcessActionPropertyRepository(
            paprika_ds)

        # retrieve the file properties
        process = process_repository.find_by_id(process_action['pcs_id'])
        file_id = process_property_repository.get_property(process, 'file_id')
        file = file_repository.find_by_id(file_id)

        datasource = process_action_property_repository.get_property(
            process_action, 'datasource')
        drop_location = process_action_property_repository.get_property(
            process_action, 'drop_location')
        filename = drop_location + '/' + file['filename']

        CsvFile.normalize(filename, filename + '.norm')
        source_encoding = CsvFile.guess_encoding(filename + '.norm')
        CsvFile.iconv(filename + '.norm', source_encoding, filename + '.utf8',
                      'utf8')
        delimiter = CsvFile.guess_delimiter(filename + '.utf8')

        skip_header = False
        if not header:
            header = CsvFile.read_header(filename + '.utf8', delimiter)
            skip_header = True

        ds = DatasourceBuilder.find(datasource)
        connector = ConnectorFactory.create_connector(ds)

        file_repository = FileRepository(ds)
        file = dict()
        file['pcs_id'] = 0
        file['job_name'] = job_name
        file['filename'] = filename
        file['state'] = 'READY'
        file['rule'] = ''
        file['hashcode'] = ''
        file['pickup_location'] = ''
        file['path'] = ''
        file['filesize'] = 0
        file['pattern'] = ''
        file = file_repository.insert(file)

        statics = dict()
        statics['job_name'] = job_name
        statics['fle_id'] = file['id']

        mapping = 'id.eeid;notification.action;job_name.job_name;fle_id.fle_id'

        stager = Stager(ds)
        stager.stage(filename + '.utf8', header, delimiter,
                     'tripolis_mailings', mapping, skip_header, statics)
        stager.close()

        logger.info(job_name,
                    'job_name: ' + job_name + 'file: ' + filename + " staged")
Beispiel #8
0
    def execute(self, connector, process_action):
        job_name = process_action['job_name']
        logger = Logger(connector, self)

        properties = PropertyRepository(connector)
        process_repository = ProcessRepository(connector)
        process_property_repository = ProcessPropertyRepository(connector)
        process_action_property_repository = ProcessActionPropertyRepository(
            connector)

        file_repository = FileRepository(connector)

        process = process_repository.find_by_id(process_action['pcs_id'])
        file_id = process_property_repository.get_property(process, 'file_id')

        file = file_repository.find_by_id(file_id)

        tmp = properties.get_property('scanner.tmp')

        # retrieve the file properties
        pickup_location = process_property_repository.get_property(
            process, 'pickup_location')
        pickup_filename = file['filename']
        pickup_path = process_property_repository.get_property(process, 'path')
        drop_location = process_action_property_repository.get_property(
            process_action, 'drop_location')

        # copy the file from pickup folder to the tmp folder.
        logger.info(job_name, pickup_location + os.sep + pickup_filename)
        pickup_client = VfsFactory.create_client(pickup_location)
        pickup_client.connect()
        pickup_path = pickup_path + os.sep + pickup_filename
        tmp_path = tmp + os.sep + pickup_filename
        pickup_client.get(pickup_path, tmp_path)
        pickup_client.close()

        # unzip the file and copy the unzipped files to the unzip folder
        logger.info(job_name,
                    'unzip ' + pickup_location + os.sep + pickup_filename)
        zip_client = VfsFactory.create_client("zip://" + tmp_path)
        zip_client.connect()
        zip_files = zip_client.list('')
        for zip_file in zip_files:

            logger.info(job_name,
                        'unzipping ' + zip_file['path'] + zip_file['filename'])
            zip_client.get(
                zip_file['path'] + zip_file['filename'],
                tmp + os.sep + zip_file['path'] + zip_file['filename'])

            # copy the file from the tmp folder to the drop folder
            logger.info(
                job_name, 'copying ' + tmp + os.sep + zip_file['path'] +
                zip_file['filename'] + ' to ' + drop_location)
            drop_client = VfsFactory.create_client(drop_location)
            drop_client.connect()

            tmp_path = zip_file['path'] + zip_file['filename']
            drop_path = drop_client.get_path() + os.sep + zip_file['filename']
            drop_client.put(tmp_path, drop_path)
            drop_client.close()

        logger.info(job_name,
                    pickup_location + os.sep + pickup_filename + " unzipped")
Beispiel #9
0
    def run(self, location):
        abort = self.get_abort()
        stop = self.get_stop()
        paprika_ds = DatasourceBuilder.build('paprika-ds.json')
        connector = ConnectorFactory.create_connector(paprika_ds)
        logger = Logger(connector, self)

        job_repository = JobRepository(connector)
        job = job_repository.job()
        job_name = job['job_name']

        settings = self.get_settings()
        while self.is_running():
            try:
                properties = PropertyRepository(connector)
                registry = FileRepository(connector)
                rule_repository = RuleRepository(connector)

                excluded_extensions = properties.get_property(
                    'scanner.excluded_extensions')
                stable_check_delay = properties.get_property(
                    'scanner.stable_check_delay')

                url = location['url']
                patterns = location['patterns']
                client = VfsFactory.create_client(url)
                client.set_excluded_extensions(excluded_extensions)
                client.set_stable_check_delay(int(stable_check_delay))
                client.set_regular_expressions(patterns)
                path = client.get_path()
                recursive = int(location['recursive'])
                depth = int(location['depth'])

                client.connect()
                files = client.list_stable(path,
                                           recursive=recursive,
                                           depth=depth)
                for file in files:
                    registered_file = registry.get_by_hashcode(
                        file['hashcode'])
                    if not registered_file:

                        # find the rule
                        found_rule = None
                        rules = rule_repository.find_by_location(location)
                        for rule in rules:
                            if Matcher.match(ReMethod, rule['pattern'],
                                             file['filename']):
                                found_rule = rule
                        if not found_rule:
                            found_rule = rule_repository.find_failsafe()

                        job = job_repository.job()
                        file_job_name = job['job_name']

                        logger.info(
                            file_job_name, "file: " + file['url'] + '/' +
                            file['filename'] + " rule: " + found_rule['rule'] +
                            " hascode:" + file['hashcode'])

                        process = ProcessService.create_process(
                            connector, found_rule['pdn_id'], file_job_name,
                            found_rule['e_pdn_id'])

                        message = dict()
                        message['job_name'] = file_job_name
                        message['filename'] = file['filename']
                        message['path'] = file['path']
                        message['pattern'] = found_rule['pattern']
                        message['rle_id'] = found_rule['id']
                        message['rule'] = found_rule['rule']
                        message['pickup_location'] = file['url']
                        message['filesize'] = file['size']
                        message['hashcode'] = file['hashcode']
                        message['pcs_id'] = process['id']
                        message['state'] = 'READY'
                        registered_file = registry.insert(message)

                        process_property_repository = ProcessPropertyRepository(
                            connector)
                        process_property_repository.set_property(
                            process, 'file_id', registered_file['id'])
                        process_property_repository.set_property(
                            process, 'pickup_location', file['url'])
                        process_property_repository.set_property(
                            process, 'path', file['path'])
                        process_property_repository.set_property(
                            process, 'payload',
                            json.dumps({
                                'filename': file['filename'],
                                'job_name': file_job_name
                            }))

                        ProcessService.execute_process(connector, process)

                client.close()

                # check if we need to abort, can be called from the main thread or other thread
                aborted = abort.is_aborted()
                self.running(not aborted)

                # check if we need to stop, will be set by the agent's WatchWorker thread
                if not aborted:
                    stopped = stop.is_stopped()
                    self.running(not stopped)

                connector.close()
                time.sleep(settings['worker_idle_delay'])
                logger.trace(job_name,
                             'worker #' + str(self.get_id()) + " executed.")
            except:
                aborted = abort.is_aborted()
                self.running(not aborted)

                if not aborted:
                    stopped = stop.is_stopped()
                    self.running(not stopped)

                result = Traceback.build()
                logger.fatal(job_name, result['message'], result['backtrace'])
                connector.close()
                time.sleep(settings['worker_exception_delay'])