Ejemplo n.º 1
0
class DirectCampaignReport(Document):
    campaign_id = fields.LongField(required=True)
    campaign_name = fields.StringField(required=True)
    date = fields.DateTimeField()
    clicks = fields.LongField()
    total_cost = fields.FloatField()
    type_name = fields.StringField()
Ejemplo n.º 2
0
class DatasetBase(EmbeddedDocument):
    owner = fields.StringField(required=True)
    hash = fields.StringField()
    size = fields.LongField()
    date = fields.LongField()
    title = fields.StringField(required=True)
    description = fields.StringField()
    category = fields.StringField(choices=DATASET_CATEGORIES)
    labels = fields.ListField(fields.StringField())
    shape = fields.ListField(fields.IntField())
Ejemplo n.º 3
0
class Certification(Document):
    _id = fields.ObjectIdField(require=True)
    user_id = fields.ObjectIdField(require=True)
    org = fields.StringField(required=True)
    name = fields.StringField(required=True)
    tags = fields.ListField(required=True)
    apply_time = fields.LongField(required=True)
    deal_time = fields.LongField(required=True)
    state = fields.StringField(require=True)   # 通过的状态
    _class = fields.StringField()
    meta = {'collection' : 'Certification'}
Ejemplo n.º 4
0
class MetrikaSourceSummaryReport(Document):
    source_id = fields.LongField(required=True)
    date = fields.DateTimeField()
    rid = fields.StringField()
    name = fields.StringField()
    group_id = fields.StringField()
    group_name = fields.StringField()
    visits = fields.LongField()
    users_count = fields.LongField()
    bounce_rate = fields.FloatField()
    page_depth = fields.FloatField()
    avg_visit_duration = fields.FloatField()
Ejemplo n.º 5
0
class Prep(Document):
    name=fields.StringField(primary_key=True)
    campaign = fields.StringField()
    priority = fields.LongField(default=0)
    updated = fields.DateTimeField()

    workflows=fields.EmbeddedDocumentListField(Workflow)
Ejemplo n.º 6
0
class TaskMetadata(Document, MetadataMixin):
    id = fields.StringField(primary_key=True,
                            default=lambda: str(uuid.uuid4()))
    status = fields.StringField(default=PENDING,
                                choices=TASK_STATUS_CODES,
                                required=True)
    owner = fields.StringField(required=True)
    command = fields.StringField(choices=TASK_COMMANDS, required=True)
    date = fields.LongField(default=lambda: int(time.time()))
    config = fields.DictField(default=lambda: dict())
    history = fields.DictField()

    meta = {
        'allow_inheritance': True,
        'db_alias': 'metadata',
        'collection': 'tasks'
    }

    def to_dict(self):
        meta = self.to_mongo().to_dict()

        if '_id' in meta:
            meta['id'] = meta['_id']
            del meta['_id']

        del meta['_cls']

        return meta

    def from_dict(self, meta):
        for name in self._fields:
            if name in meta:
                setattr(self, name, meta[name])
Ejemplo n.º 7
0
class RegularModel(Document):
    """
    A model class for testing regular flat fields.
    """
    str_field = fields.StringField()
    str_regex_field = fields.StringField(regex="^valid_regex")
    url_field = fields.URLField()
    email_field = fields.EmailField()
    int_field = fields.IntField()
    long_field = fields.LongField()
    float_field = fields.FloatField()
    boolean_field = fields.BooleanField()
    nullboolean_field = fields.BooleanField(null=True)
    date_field = fields.DateTimeField()
    complexdate_field = fields.ComplexDateTimeField()
    uuid_field = fields.UUIDField()
    id_field = fields.ObjectIdField()
    decimal_field = fields.DecimalField()

    custom_field = CustomField()

    # TODO
    # dynamic_field = fields.DynamicField()
    # bin_field = fields.BinaryField()
    # file_field = fields.FileField()
    # image_field = fields.ImageField()

    def method(self):
        return 'method'
Ejemplo n.º 8
0
class CharacterSheet(mongoengine.Document):
    name = fields.StringField()
    description = fields.StringField()
    hit_points = fields.IntField()
    level = fields.IntField()
    experience = fields.LongField()
    strength = fields.FloatField()
    dexterity = fields.FloatField()
    constitution = fields.FloatField()
    inteligence = fields.FloatField()
    wisdom = fields.FloatField()
    charisma = fields.FloatField()
    armor_class = fields.FloatField()
    fortitude = fields.FloatField()
    reflex = fields.FloatField()
    will = fields.FloatField()
    race = fields.StringField()
    klass = fields.StringField()
    skills = fields.ListField(fields.StringField())
    items = fields.ListField(fields.StringField())
    owner = fields.StringField()
    # race = fields.ReferenceField('Race')
    # klass = fields.ReferenceField('Klass')
    # skills = fields.ListField(fields.ReferenceField('Skill'))
    # items = fields.ListField(fields.ReferenceField('Item'))
    # owner = fields.ReferenceField('User')


    def restore(self, memento):
        """
        Restores the Originator's state from a memento object.
        """
        
        self.hit_points = memento.get_hit_points()
        self.update()
Ejemplo n.º 9
0
class Foo(Document):
    string = fields.StringField()
    required = fields.StringField(required=True)
    choices = fields.StringField(choices=('foo', 'bar', 'baz'))
    regex = fields.StringField(regex=r'^[a-z]*$')
    length = fields.StringField(min_length=1, max_length=3)
    strings = fields.ListField(fields.StringField())
    sorted_strings = fields.SortedListField(fields.StringField())
    integer = fields.IntField()
    bounded_int = fields.IntField(min_value=0, max_value=10)
    longeger = fields.LongField()
    bounded_long = fields.LongField(min_value=0, max_value=10)
    floating = fields.FloatField()
    bounded_float = fields.FloatField(min_value=0.0, max_value=1.0)
    boolean = fields.BooleanField()
    datetime = fields.DateTimeField()
    complex_datetime = fields.ComplexDateTimeField()
    binary = fields.BinaryField()
    bounded_binary = fields.BinaryField(max_bytes=8)
    mapping = fields.MapField(fields.StringField())
    uuid = fields.UUIDField()

    old_geopoint = fields.GeoPointField()

    point = fields.PointField()
    line = fields.LineStringField()
    polygon = fields.PolygonField()

    points = fields.MultiPointField()
    lines = fields.MultiLineStringField()
    polygons = fields.MultiPolygonField()

    even_length_string = fields.StringField(
        validation=lambda s: len(s) % 2 == 0)

    @fields.EmbeddedDocumentField
    class embedded_bar(EmbeddedDocument):
        bar = fields.StringField()

    @fields.EmbeddedDocumentListField
    class embedded_baz(EmbeddedDocument):
        baz = fields.StringField()
Ejemplo n.º 10
0
class Task(EmbeddedDocument):
    name = fields.StringField(primary_key=True)
    short_name = fields.StringField()
    workflow = fields.StringField()
    parent_workflow = fields.StringField()
    job_type = fields.StringField()
    failures_count = fields.LongField()

    prep = fields.EmbeddedDocumentField(TaskPrep)
    statuses = fields.EmbeddedDocumentListField(TaskSiteStatus)
    task_action = fields.ReferenceField(TaskAction)
Ejemplo n.º 11
0
class Article(Document):
    title = fields.StringField(unique=True)
    text = fields.StringField()
    comments = fields.ListField(fields.EmbeddedDocumentField(Comment))
    top_comment = fields.EmbeddedDocumentField(Comment)
    tags = fields.ListField(fields.StringField())
    publish = fields.BooleanField()
    publish_date = fields.DateTimeField()
    version = fields.FloatField()
    order = fields.IntField()
    serial_number = fields.LongField()
Ejemplo n.º 12
0
class ModelBase(EmbeddedDocument):
    owner = fields.StringField(required=True)
    hash = fields.StringField()
    size = fields.LongField()
    date = fields.LongField()
    title = fields.StringField(required=True)
    description = fields.StringField()
    labels = fields.ListField(field=fields.StringField())
    metrics = fields.DictField(default=lambda: dict())
    architecture = fields.ReferenceField(ArchitectureMetadata, required=True)
    dataset = fields.ReferenceField(DatasetMetadata, required=True)
    # TODO: parent = fields.ReferenceField(Model)
    shape = fields.ListField(field=fields.IntField())

    # category = fields.StringField()

    @property
    def category(self):
        """Return category from dataset"""

        return self.dataset.base.category
Ejemplo n.º 13
0
class SimpleDoc(Document):
    f_str = fields.StringField()
    f_url = fields.URLField()
    f_eml = fields.EmailField()
    f_int = fields.IntField()
    f_lng = fields.LongField()
    f_flt = fields.FloatField()
    f_dec = fields.DecimalField()
    f_bool = fields.BooleanField()
    f_dt = fields.DateTimeField()
    f_oid = fields.ObjectIdField()
    f_uuid = fields.UUIDField()
Ejemplo n.º 14
0
class CeleryTaskControl(Document):
    """celery的控制模型"""
    queue = fields.StringField(verbose_name='任务队列名, eg: inner_quick',
                               require=True)
    control_type = fields.StringField(verbose_name='控制类别',
                                      require=True,
                                      default=ControlTypeEnum.func)
    func = fields.StringField(verbose_name='方法名: test_1, 当控制类别为func时必填')
    start_time = fields.LongField(verbose_name='开始生效时间', default=get_timestamp)
    end_time = fields.LongField(verbose_name='结束生效时间', default=0)
    rm_current_tasks = fields.StringField(
        verbose_name='删除现有未执行的任务,当控制类别为queue时有效',
        default=ControlRmCurrentEnum.no)
    status = fields.IntField(verbose_name='启用状态',
                             require=True,
                             default=ControlValidEnum.valid)

    meta = {
        'collection': 'hdy_celery_control',
        'indexes': ['start_time', 'end_time', 'status']
    }
Ejemplo n.º 15
0
class Character(mongoengine.Document):
    # Maybe will be necessary to switch ReferenceFields for LazyReferenceFields
    name = fields.StringField()
    description = fields.StringField()
    hit_points = fields.IntField()
    level = fields.IntField()
    experience = fields.LongField()
    attributes = fields.ReferenceField('Attributes')
    race = fields.ReferenceField('Race')
    klass = fields.ReferenceField('Klass')
    skills = fields.ListField(fields.ReferenceField('Skill'))
    items = fields.ListField(fields.ReferenceField('Item'))
    owner = fields.ReferenceField('User')
Ejemplo n.º 16
0
class ConcreteCharacterMemento(mongoengine.Document):
    
    hit_points = fields.IntField()    
    level = fields.IntField()
    experience = fields.LongField()
    strength = fields.FloatField()
    desterity = fields.FloatField()
    costitution = fields.FloatField()
    intelligence = fields.FloatField()
    wisdom = fields.FloatField()
    charisma = fields.FloatField()
    skills = fields.ListField(fields.StringField())
    items = fields.ListField(fields.StringField())
    date = fields.DateTimeField()
Ejemplo n.º 17
0
 class Schema1EmbDoc2(EmbeddedDocument):
     embdoc2_int = fields.IntField()
     embdoc2_str = fields.StringField()
     embdoc2_str_empty = fields.StringField()
     embdoc2_str_ten = fields.StringField(choices=[str(x) for x in range(11)])
     embdoc2_float = fields.FloatField()
     embdoc2_int_empty = fields.IntField()
     embdoc2_long = fields.LongField()
     embdoc2_decimal = fields.DecimalField()
     embdoc2_complex_datetime = fields.ComplexDateTimeField()
     embdoc2_list = fields.ListField()
     embdoc2_ref_doc1 = fields.ReferenceField('Schema1Doc1')
     embdoc2_emb_embdoc2 = fields.EmbeddedDocumentField('self')
     embdoc2_emblist_embdoc2 = fields.EmbeddedDocumentListField('self')
Ejemplo n.º 18
0
class User(db.Document, BaseModelMixin):
    username = fields.StringField()
    _password = fields.StringField(db_field='password')
    email = fields.EmailField(unique=True)
    avatar = fields.StringField(default=None)
    position = fields.StringField()  # 职位
    department = fields.StringField()  # 部门
    phone = fields.StringField()

    equipment_num = fields.LongField(default=0)  # 装置数量
    device_num = fields.LongField(default=0)  # 设备数量
    interface_num = fields.LongField(default=0)  # 接口数量
    cable_num = fields.LongField(default=0)  # 线缆数量

    login_num = fields.LongField(default=0)
    search_num = fields.LongField(default=0)

    author_type = fields.IntField(default=0)
    author_editable = fields.BooleanField(default=True)
    deletable = fields.BooleanField(default=True)
    is_active = fields.BooleanField(default=True)
    token = fields.EmbeddedDocumentField(Token, default=None)

    is_anonymous = False

    def get_id(self):
        return str(self.id)

    @property
    def is_authenticated(self):
        return self.is_active and self.token is not None and self.token.expired_at > datetime.now(
        )

    @property
    def password(self):
        return self._password

    @password.setter
    def password(self, pwd):
        self._password = pbkdf2_sha256.hash(pwd)

    def check_password(self, pwd):
        return pbkdf2_sha256.verify(pwd, self._password)

    def refresh_token(self, token_expired_time):
        self.token.expired_at = datetime.now() + timedelta(
            seconds=token_expired_time)
        return self.save()

    def generate_token(self, token_expired_time):
        token = binascii.hexlify(
            os.urandom(20) + str(self.id).encode('utf-8')).decode()
        expired_at = datetime.now() + timedelta(seconds=token_expired_time)
        self.token = Token(value=token, expired_at=expired_at)
        self.login_num += 1
        self.save()
        return self.token.value
Ejemplo n.º 19
0
class CovidPersonalUser(Document):

    user = fields.LongField(required=True)
    date_birth = fields.DateField(required=True)
    last_send_geo = fields.DateTimeField()
    last_update_status = fields.DateTimeField(default=datetime.now)
    created_at = fields.DateTimeField(default=datetime.now)
    status = fields.StringField(required=True)
    observation = fields.StringField()
    coordinates = fields.PointField()

    class Meta:
        verbose_name = 'CovidPersonalUser'
        verbose_name_plural = 'CovidPersonalUsers'

    def __str__(self):
        return User.objects.get(pk=self.user).name
Ejemplo n.º 20
0
class URLStat(db.Document):
    """Statistic for redirect usage"""

    #User.email - no direct reference
    author = fields.EmailField(required=True)

    #URL.target - no direct reference
    target = fields.StringField(required=True)

    date = fields.DateTimeField(default=utils.utcnow)

    count = fields.LongField(default=0, required=True)

    #Json Text ?
    useragent = fields.StringField()

    def __unicode__(self):
        return "%s - %s" % (self.author, self.target)
Ejemplo n.º 21
0
class CeleryErrorRecord(Document):
    """celery执行的错误记录"""
    task_id = fields.StringField(verbose_name='celery任务id',
                                 require=True,
                                 primary_key=True)
    full_func = fields.StringField(
        verbose_name='带路径的方法名,eg: tasks.task_1.test_1')
    func_params = fields.DictField(verbose_name='方法参数 {args:(), kwargs: {}}')
    exc = fields.StringField(verbose_name='简短异常说明')
    error_info = fields.StringField(verbose_name='异常堆栈详细信息')
    create_time = fields.LongField(verbose_name='创建时间', default=get_timestamp)
    create_time_human = fields.StringField(verbose_name='创建时间,人看的',
                                           default=now_yyyymmddhhmmss)

    meta = {
        'collection': 'hdy_celery_error',
        'indexes': ['full_func', 'create_time', 'create_time_human']
    }
Ejemplo n.º 22
0
class TaskAction(Document):
    name = fields.StringField()
    workflow = fields.StringField()
    acted = fields.IntField()
    timestamp = fields.LongField()
    parameters = fields.EmbeddedDocumentField(TaskActionParameters)
Ejemplo n.º 23
0
class AlarmClass(nosql.Document):
    """
    Alarm class
    """
    meta = {
        "collection": "noc.alarmclasses",
        "strict": False,
        "auto_create_index": False,
        "json_collection": "fm.alarmclasses",
        "json_depends_on": [
            "fm.alarmseverities"
        ],
    }

    name = fields.StringField(required=True, unique=True)
    uuid = fields.UUIDField(binary=True)
    description = fields.StringField(required=False)
    # Create or not create separate Alarm
    # if is_unique is True and there is active alarm
    # Do not create separate alarm if is_unique set
    is_unique = fields.BooleanField(default=False)
    # List of var names to be used as discriminator key
    discriminator = fields.ListField(nosql.StringField())
    # Can alarm status be cleared by user
    user_clearable = fields.BooleanField(default=True)
    # Default alarm severity
    default_severity = nosql.PlainReferenceField(AlarmSeverity)
    #
    datasources = fields.ListField(fields.EmbeddedDocumentField(DataSource))
    vars = fields.ListField(fields.EmbeddedDocumentField(AlarmClassVar))
    # Text messages
    subject_template = fields.StringField()
    body_template = fields.StringField()
    symptoms = fields.StringField()
    probable_causes = fields.StringField()
    recommended_actions = fields.StringField()

    # Flap detection
    flap_condition = fields.StringField(
        required=False,
        choices=[("none", "none"), ("count", "count")],
        default="none")
    flap_window = fields.IntField(required=False, default=0)
    flap_threshold = fields.FloatField(required=False, default=0)
    # RCA
    root_cause = fields.ListField(
        fields.EmbeddedDocumentField(AlarmRootCauseCondition))
    topology_rca = fields.BooleanField(default=False)
    # List of handlers to be called on alarm raising
    handlers = fields.ListField(fields.StringField())
    # List of handlers to be called on alarm clear
    clear_handlers = fields.ListField(fields.StringField())
    # Plugin settings
    plugins = fields.ListField(fields.EmbeddedDocumentField(AlarmPlugin))
    # Time in seconds to delay alarm risen notification
    notification_delay = fields.IntField(required=False)
    # Control time to reopen alarm instead of creating new
    control_time0 = fields.IntField(required=False)
    # Control time to reopen alarm after 1 reopen
    control_time1 = fields.IntField(required=False)
    # Control time to reopen alarm after >1 reopen
    control_timeN = fields.IntField(required=False)
    # Consequence recover time
    # Root cause will be detached if consequence alarm
    # will not clear itself in *recover_time*
    recover_time = fields.IntField(required=False, default=300)
    #
    bi_id = fields.LongField(unique=True)
    #
    category = nosql.ObjectIdField()

    _id_cache = cachetools.TTLCache(maxsize=1000, ttl=60)
    _bi_id_cache = cachetools.TTLCache(maxsize=1000, ttl=60)
    _name_cache = cachetools.TTLCache(maxsize=1000, ttl=60)

    _handlers_cache = {}
    _clear_handlers_cache = {}

    def __unicode__(self):
        return self.name

    @classmethod
    @cachetools.cachedmethod(operator.attrgetter("_id_cache"), lock=lambda _: id_lock)
    def get_by_id(cls, id):
        return AlarmClass.objects.filter(id=id).first()

    @classmethod
    @cachetools.cachedmethod(operator.attrgetter("_bi_id_cache"), lock=lambda _: id_lock)
    def get_by_bi_id(cls, id):
        return AlarmClass.objects.filter(bi_id=id).first()

    @classmethod
    @cachetools.cachedmethod(operator.attrgetter("_name_cache"), lock=lambda _: id_lock)
    def get_by_name(cls, name):
        return AlarmClass.objects.filter(name=name).first()

    def get_handlers(self):
        @cachetools.cached(self._handlers_cache, key=lambda x: x.id, lock=handlers_lock)
        def _get_handlers(alarm_class):
            handlers = []
            for hh in alarm_class.handlers:
                try:
                    h = get_handler(hh)
                except ImportError:
                    h = None
                if h:
                    handlers += [h]
            return handlers

        return _get_handlers(self)

    def get_clear_handlers(self):
        @cachetools.cached(self._clear_handlers_cache, key=lambda x: x.id, lock=handlers_lock)
        def _get_handlers(alarm_class):
            handlers = []
            for hh in alarm_class.clear_handlers:
                try:
                    h = get_handler(hh)
                except ImportError:
                    h = None
                if h:
                    handlers += [h]
            return handlers

        return _get_handlers(self)

    def save(self, *args, **kwargs):
        c_name = " | ".join(self.name.split(" | ")[:-1])
        c = AlarmClassCategory.objects.filter(name=c_name).first()
        if not c:
            c = AlarmClassCategory(name=c_name)
            c.save()
        self.category = c.id
        super(AlarmClass, self).save(*args, **kwargs)

    def get_discriminator(self, vars):
        """
        Calculate discriminator hash

        :param vars: Dict of vars
        :returns: Discriminator hash
        """
        if vars:
            ds = sorted(str(vars[n]) for n in self.discriminator)
            return hashlib.sha1("\x00".join(ds)).hexdigest()
        else:
            return hashlib.sha1("").hexdigest()

    def to_json(self):
        c = self
        r = ["{"]
        r += ["    \"name\": \"%s\"," % q(c.name)]
        r += ["    \"$collection\": \"%s\"," % self._meta["json_collection"]]
        r += ["    \"uuid\": \"%s\"," % c.uuid]
        if c.description:
            r += ["    \"desciption\": \"%s\"," % q(c.description)]
        r += ["    \"is_unique\": %s," % q(c.is_unique)]
        if c.is_unique and c.discriminator:
            r += ["    \"discriminator\": [%s]," % ", ".join(["\"%s\"" % q(d) for d in c.discriminator])]
        r += ["    \"user_clearable\": %s," % q(c.user_clearable)]
        r += ["    \"default_severity__name\": \"%s\"," % q(c.default_severity.name)]
        # datasources
        if c.datasources:
            r += ["    \"datasources\": ["]
            jds = []
            for ds in c.datasources:
                x = []
                x += ["            \"name\": \"%s\"" % q(ds.name)]
                x += ["            \"datasource\": \"%s\"" % q(ds.datasource)]
                ss = []
                for k in sorted(ds.search):
                    ss += ["                \"%s\": \"%s\"" % (q(k), q(ds.search[k]))]
                x += ["            \"search\": {\n%s\n            }" % (",\n".join(ss))]
                jds += ["        {\n%s\n        }" % ",\n".join(x)]
            r += [",\n\n".join(jds)]
            r += ["    ],"]
        # vars
        vars = []
        for v in c.vars:
            vd = ["        {"]
            vd += ["            \"name\": \"%s\"," % q(v.name)]
            vd += ["            \"description\": \"%s\"" % q(v.description)]
            if v.default:
                vd[-1] += ","
                vd += ["            \"default\": \"%s\"" % q(v.default)]
            vd += ["        }"]
            vars += ["\n".join(vd)]
        r += ["    \"vars\": ["]
        r += [",\n".join(vars)]
        r += ["    ],"]
        # Handlers
        if self.handlers:
            hh = ["        \"%s\"" % h for h in self.handlers]
            r += ["    \"handlers\": ["]
            r += [",\n\n".join(hh)]
            r += ["    ],"]
        if self.clear_handlers:
            hh = ["        \"%s\"" % h for h in self.clear_handlers]
            r += ["    \"clear_handlers\": ["]
            r += [",\n\n".join(hh)]
            r += ["    ],"]
        # Text
        r += ["    \"subject_template\": \"%s\"," % q(c.subject_template)]
        r += ["    \"body_template\": \"%s\"," % q(c.body_template)]
        r += ["    \"symptoms\": \"%s\"," % q(c.symptoms if c.symptoms else "")]
        r += ["    \"probable_causes\": \"%s\"," % q(c.probable_causes if c.probable_causes else "")]
        r += ["    \"recommended_actions\": \"%s\"," % q(c.recommended_actions if c.recommended_actions else "")]
        # Root cause
        if self.root_cause:
            rc = []
            for rr in self.root_cause:
                rcd = ["        {"]
                rcd += ["            \"name\": \"%s\"," % rr.name]
                rcd += ["            \"root__name\": \"%s\"," % rr.root.name]
                rcd += ["            \"window\": %d," % rr.window]
                if rr.condition:
                    rcd += ["            \"condition\": \"%s\"," % rr.condition]
                rcd += ["            \"match_condition\": {"]
                mcv = []
                for v in rr.match_condition:
                    mcv += ["                \"%s\": \"%s\"" % (v, rr.match_condition[v])]
                rcd += [",\n".join(mcv)]
                rcd += ["            }"]
                rcd += ["        }"]
                rc += ["\n".join(rcd)]
            if r[-1][-1] != ",":
                r[-1] += ","
            r += ["    \"root_cause\": ["]
            r += [",\n".join(rc)]
            r += ["    ]"]
        if self.topology_rca:
            if r[-1][-1] != ",":
                r[-1] += ","
            r += ["    \"topology_rca\": true"]
        # Plugins
        if self.plugins:
            if r[-1][-1] != ",":
                r[-1] += ","
            plugins = []
            for p in self.plugins:
                pd = ["        {"]
                pd += ["            \"name\": \"%s\"" % p.name]
                if p.config:
                    pd[-1] += ","
                    pc = []
                    for v in p.config:
                        pc += ["                \"%s\": \"%s\"" % (v, p.config.vars[v])]
                    pd += ["            \"config\": {"]
                    pd += [",\n".join(pc)]
                    pd += ["            }"]
                pd += ["        }"]
                plugins += ["\n".join(pd)]
            r += ["    \"plugins\": ["]
            r += [",\n".join(plugins)]
            r += ["    ]"]
        if self.notification_delay:
            if r[-1][-1] != ",":
                r[-1] += ","
            r += ["    \"notification_delay\": %d" % self.notification_delay]
        if self.control_time0:
            if r[-1][-1] != ",":
                r[-1] += ","
            r += ["    \"control_time0\": %d" % self.control_time0]
            if self.control_time1:
                r[-1] += ","
                r += ["    \"control_time1\": %d" % self.control_time1]
                if self.control_timeN:
                    r[-1] += ","
                    r += ["    \"control_timeN\": %d" % self.control_timeN]
        if self.recover_time:
            if r[-1][-1] != ",":
                r[-1] += ","
            r += ["    \"recover_time\": %d" % self.recover_time]
        # Close
        if r[-1].endswith(","):
            r[-1] = r[-1][:-1]
        r += ["}", ""]
        return "\n".join(r)

    def get_json_path(self):
        p = [quote_safe_path(n.strip()) for n in self.name.split("|")]
        return os.path.join(*p) + ".json"

    @property
    def config(self):
        if not hasattr(self, "_config"):
            self._config = AlarmClassConfig.objects.filter(alarm_class=self.id).first()
        return self._config

    def get_notification_delay(self):
        if self.config:
            return self.config.notification_delay or None
        else:
            return self.notification_delay or None

    def get_control_time(self, reopens):
        if reopens == 0:
            if self.config:
                return self.config.control_time0 or None
            else:
                return self.control_time0 or None
        elif reopens == 1:
            if self.config:
                return self.config.control_time1 or None
            else:
                return self.control_time1 or None
        else:
            if self.config:
                return self.config.control_timeN or None
            else:
                return self.control_timeN or None
Ejemplo n.º 24
0
class TaskSiteStatus(EmbeddedDocument):
    site = fields.StringField()
    dataset = fields.StringField()
    success_count = fields.LongField(default=0)
    failed_count = fields.LongField(default=0)
Ejemplo n.º 25
0
class TaskPrep(EmbeddedDocument):
    name = fields.StringField()
    campaign = fields.StringField()
    priority = fields.LongField(default=0)
Ejemplo n.º 26
0
class MetricKeys(EmbeddedDocument):

    count = fields.LongField(default=0)

    mail_in = fields.LongField(default=0)

    mail_out = fields.LongField(default=0)

    clean = fields.LongField(default=0)

    spam = fields.LongField(default=0)

    virus = fields.LongField(default=0)

    banned = fields.LongField(default=0)

    unchecked = fields.LongField(default=0)

    bounce = fields.LongField(default=0)

    files_count = fields.LongField(default=0)

    total_size = fields.LongField(default=0.0)
Ejemplo n.º 27
0
class MessageStore(BaseDocument):
    """
    TODO: is_spam, is_virus, ... en champs numérique: 0 ou 1 pour stats
    TODO: is_ham, is_spam, ...
    
    0-prod\rs-admin\archives\rs-admin\rs_admin\mail_parser_utils.py
    
    TODO: ('X-Originating-IP', '[88.175.183.38]')
    """

    completed = fields.IntField(default=0)

    group_name = fields.StringField(required=True,
                                    max_length=80,
                                    default=constants.GROUP_DEFAULT,
                                    verbose_name=gettext(u"Group"))

    domain_name = fields.StringField(max_length=63,
                                     verbose_name=gettext(u"Domain"))

    policy_uid = fields.StringField()

    quarantine_id = fields.StringField()

    is_in = fields.IntField(default=1,
                            verbose_name=gettext(u"Incoming message"),
                            help_text=gettext(u"Incoming or Outgoing Message"))

    store_key = fields.StringField(required=True, unique=True)

    sent = fields.DateTimeField(verbose_name=gettext(u"Sent Date"))

    #sent_origin = fields.StringField()

    received = fields.DateTimeField(default=utils.timestamp,
                                    verbose_name=gettext(u"Received Date"))

    headers = fields.DictField()

    message = fields.FileField()

    #FIXME: ne pas utiliser le nom size !!!!
    size = fields.LongField(default=0, verbose_name=gettext(u"Size"))

    subject = fields.StringField(verbose_name=gettext(u"Subject"))

    message_id = fields.StringField()

    sender = fields.StringField(verbose_name=gettext(u"Sender"))

    #Pas de EmailField
    rcpt = fields.ListField(fields.StringField(),
                            default=[],
                            verbose_name=gettext(u"Recipients(s)"))

    rcpt_count = fields.IntField(default=0,
                                 verbose_name=gettext(u"Rcpts"),
                                 help_text=gettext(u"Number of recipients"))

    #mode proxy ou autre pour rcpt refusé à la livraison - refus partiel seulement
    rcpt_refused = fields.DictField(default={})

    #IP du client original par xforward
    client_address = fields.StringField(verbose_name=gettext(u"IP Address"))

    country = fields.StringField(
        verbose_name=gettext(u"Country"),
        help_text=gettext(u"Country based on ip address of sender smtp"))

    #receiveds_header = fields.SortedListField(fields.StringField(), default=[])

    is_bounce = fields.IntField(default=0, verbose_name=gettext(u"Bounce ?"))

    is_spam = fields.IntField(default=0, verbose_name=gettext(u"Spam ?"))

    is_virus = fields.IntField(default=0, verbose_name=gettext(u"Infected ?"))

    is_banned = fields.IntField(default=0, verbose_name=gettext(u"Banned ?"))

    is_unchecked = fields.IntField(default=0,
                                   verbose_name=gettext(u"Checked ?"))

    xforward = fields.DictField()

    #IP du serveur SMTP postfix
    server = fields.StringField()

    queue = fields.IntField(choices=constants.MESSAGE_QUEUE_CHOICES,
                            default=constants.MESSAGE_QUEUE_INCOMING)

    files_count = fields.IntField(
        default=0,
        verbose_name=gettext(u"Files"),
        help_text=gettext(u"Number of attachments in message"))

    files = fields.EmbeddedDocumentListField(MessageAttachment)

    events = fields.EmbeddedDocumentListField(MessageEvent)

    tags = fields.ListField(fields.StringField(), default=[])

    parsing_errors = fields.ListField(fields.StringField(), default=[])

    errors_count = fields.IntField(default=0)

    turing = fields.EmbeddedDocumentField(MessageTuring, required=False)

    metric = fields.IntField(default=0)

    def get_filter_result(self):
        if self.is_virus:
            return "VIRUS"
        elif self.is_spam:
            return "SPAM"
        elif self.is_banned:
            return "BANNED"
        elif self.is_unchecked:
            return "UNCHECKED"
        else:
            return "CLEAN"

    filter_result = property(fget=get_filter_result)

    def _complete(self):
        """
        Complete parsing message
        """

        values = {'completed': 1}

        other_fields = message_complete(self.store_key,
                                        self.parse_message(pure_string=True),
                                        sender=self.sender)

        values.update(other_fields)

        values.update(
            identify(sender=self.sender,
                     client_address=self.client_address,
                     rcpt=self.rcpt))

        fields = MessageStore._fields.keys()
        for key, value in values.iteritems():
            if key in fields:
                setattr(self, key, value)

        #TODO: validate / clean
        return self.save(
            force_insert=False
        )  #, validate, clean, write_concern, cascade, cascade_kwargs, _refs, save_condition)

    def parse_message(self, pure_string=False):
        msg_string = utils.uncompress(self.message.read())
        try:
            if pure_string:
                return msg_string
            return from_string(msg_string)
        except Exception, err:
            logger.error(str(err))
            return recover(msg_string)