Пример #1
0
 def __init__(self, definition_cfg):
     self.cfg = definition_cfg
     for fname, fval in self.cfg.items():
         if (isinstance(fname, six.string_types)
                 and (fname in self.required_fields
                      or fname.endswith('_inspector'))):
             setattr(self, fname, fval)
         else:
             LOG.warning(_LW("Ignore unrecognized field %s"), fname)
     for fname in self.required_fields:
         if not getattr(self, fname, None):
             raise declarative.MeterDefinitionException(
                 _LE("Missing field %s") % fname, self.cfg)
     if self.type not in sample.TYPES:
         raise declarative.MeterDefinitionException(
             _LE("Unrecognized type value %s") % self.type, self.cfg)
Пример #2
0
    def __init__(self, definition_cfg, conf, plugin_manager):
        self.conf = conf
        self.cfg = definition_cfg
        missing = [
            field for field in self.REQUIRED_FIELDS if not self.cfg.get(field)
        ]
        if missing:
            raise declarative.MeterDefinitionException(
                _("Required fields %s not specified") % missing, self.cfg)

        self._event_type = self.cfg.get('event_type')
        if isinstance(self._event_type, six.string_types):
            self._event_type = [self._event_type]
        self._event_type = [re.compile(etype) for etype in self._event_type]

        if ('type' not in self.cfg.get('lookup', [])
                and self.cfg['type'] not in sample_util.TYPES):
            raise declarative.MeterDefinitionException(
                _("Invalid type %s specified") % self.cfg['type'], self.cfg)

        self._fallback_user_id = declarative.Definition(
            'user_id', "ctxt.user_id|ctxt.user", plugin_manager)
        self._fallback_project_id = declarative.Definition(
            'project_id', "ctxt.tenant_id|ctxt.tenant", plugin_manager)
        self._attributes = {}
        self._metadata_attributes = {}
        self._user_meta = None

        for name in self.SAMPLE_ATTRIBUTES:
            attr_cfg = self.cfg.get(name)
            if attr_cfg:
                self._attributes[name] = declarative.Definition(
                    name, attr_cfg, plugin_manager)
        metadata = self.cfg.get('metadata', {})
        for name in metadata:
            self._metadata_attributes[name] = declarative.Definition(
                name, metadata[name], plugin_manager)
        user_meta = self.cfg.get('user_metadata')
        if user_meta:
            self._user_meta = declarative.Definition(None, user_meta,
                                                     plugin_manager)

        # List of fields we expected when multiple meter are in the payload
        self.lookup = self.cfg.get('lookup')
        if isinstance(self.lookup, six.string_types):
            self.lookup = [self.lookup]