Пример #1
0
    def do_activity(self, data=None):
        """
        Do the work
        """
        if self.logger:
            self.logger.info('data: %s' % json.dumps(data, sort_keys=True, indent=4))

        run = data['run']
        session = Session(self.settings)
        article_id = session.get_value(run, 'article_id')
        version = session.get_value(run, 'version')

        self.emit_monitor_event(self.settings, article_id, version, run, self.pretty_name, "start",
                                "Starting Glencoe video check for " + article_id)
        try:
            expanded_folder = session.get_value(run, 'expanded_folder')
            if expanded_folder is None:
                raise RuntimeError("No session value for expanded folder")

            expanded_bucket = self.settings.publishing_buckets_prefix + self.settings.expanded_bucket
            self.logger.info("expanded_bucket: " + expanded_bucket)

            xml_filename = lax_provider.get_xml_file_name(self.settings, expanded_folder, expanded_bucket, version)
            if xml_filename is None:
                raise RuntimeError("No xml_filename found.")

            xml_origin = "".join((self.settings.storage_provider, "://", expanded_bucket, "/", expanded_folder + '/' +
                                  xml_filename))

            storage_context = StorageContext(self.settings)
            xml_content = storage_context.get_resource_as_string(xml_origin)

            if glencoe_check.has_videos(xml_content):
                glencoe_check.validate_sources(glencoe_check.metadata(glencoe_check.check_msid(article_id), self.settings))
                self.emit_monitor_event(self.settings, article_id, version, run, self.pretty_name, "end",
                                        "Finished Verification. Glencoe is available. Article: " + article_id)
                return True

            self.emit_monitor_event(self.settings, article_id, version, run, self.pretty_name, "end",
                                    "Finished Verification. No Glencoe media tags found in xml. "
                                    "Article: " + article_id)
            return True
        except AssertionError as err:
            self.logger.info(err)
            self.emit_monitor_event(self.settings, article_id, version, run, self.pretty_name, "error",
                                    "Glencoe video is not available for article " + article_id + '; message: ' + str(err))
            time.sleep(60)
            return activity.activity.ACTIVITY_TEMPORARY_FAILURE
        except Exception as e:
            self.logger.exception(str(e))
            self.emit_monitor_event(self.settings, article_id, version, run, self.pretty_name, "error",
                                    "An error occurred when checking for Glencoe video. Article " +
                                    article_id + '; message: ' + str(e))
            return activity.activity.ACTIVITY_PERMANENT_FAILURE
    def do_activity(self, data=None):
            self.emit_monitor_event(self.settings, data['article_id'], data['version'], data['run'],
                                    self.pretty_name, "start",
                                    "Starting Updating repository for article " + data['article_id'])

            # assert all Github settings have are not None when live
            # if Github settings are null and we are testing, skip activity
            if None in (self.settings.git_repo_path, self.settings.git_repo_name, self.settings.github_token):
                import settings as settingsLib
                if isinstance(self.settings(), settingsLib.live) or isinstance(self.settings(), settingsLib.prod) or \
                        isinstance(self.settings(), settingsLib.end2end):
                    self.emit_monitor_event(self.settings, data['article_id'], data['version'], data['run'],
                                            self.pretty_name, "error",
                                            "Error Updating repository for article. Github settings are unavailable.")
                    return activity.activity.ACTIVITY_PERMANENT_FAILURE

                self.emit_monitor_event(self.settings, data['article_id'], data['version'], data['run'],
                                        self.pretty_name, "end",
                                        "UpdateRepository got skipped as there are no Github "
                                        "settings (Test enviroment).")
                return True

            try:

                xml_file = lax_provider.get_xml_file_name(self.settings,
                                                          data['article_id'],
                                                          self.settings.publishing_buckets_prefix +
                                                          self.settings.ppp_cdn_bucket,
                                                          data['version'])
                s3_file_path = data['article_id'] + "/" + xml_file

                #download xml
                with tempfile.TemporaryFile(mode='r+') as tmp:
                    storage_context = StorageContext(self.settings)
                    storage_provider = self.settings.storage_provider + "://"
                    published_path = storage_provider + self.settings.publishing_buckets_prefix + \
                                       self.settings.ppp_cdn_bucket

                    resource = published_path + "/" + s3_file_path

                    storage_context.get_resource_to_file(resource, tmp)

                    file_content = storage_context.get_resource_as_string(resource)

                    message = self.update_github(self.settings.git_repo_path + xml_file, file_content)

                    self.logger.info(message)
                    self.emit_monitor_event(self.settings, data['article_id'], data['version'], data['run'],
                                    self.pretty_name, "end",
                                    "Finished Updating repository for article. Details: " + message)
                    return True

            except RetryException as e:
                self.logger.info(e.message)
                return activity.activity.ACTIVITY_TEMPORARY_FAILURE

            except Exception as e:
                self.logger.exception("Exception in do_activity")
                self.emit_monitor_event(self.settings, data['article_id'], data['version'], data['run'],
                                        self.pretty_name, "error",
                                        "Error Updating repository for article. Details: " + str(e))
                return activity.activity.ACTIVITY_PERMANENT_FAILURE