# -*- coding: utf-8 -*- # Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import sqlalchemy as sa from appenlight.lib.enums import ReportType from appenlight.models import Base from ziggurat_foundations.models.base import BaseModel class ReportStat(Base, BaseModel): __tablename__ = "reports_stats" __table_args__ = {"implicit_returning": False} group_id = sa.Column( sa.BigInteger(), sa.ForeignKey("reports_groups.id"), nullable=False ) resource_id = sa.Column( sa.Integer(), sa.ForeignKey("applications.resource_id"), nullable=False ) start_interval = sa.Column(sa.DateTime(), nullable=False) occurences = sa.Column(sa.Integer, nullable=True, default=0) owner_user_id = sa.Column(sa.Integer(), sa.ForeignKey("users.id"), nullable=True) type = sa.Column(sa.Integer, nullable=True, default=0) duration = sa.Column(sa.Float, nullable=True, default=0) id = sa.Column(sa.BigInteger, nullable=False, primary_key=True) server_name = sa.Column(sa.Unicode(128), nullable=False, default="") view_name = sa.Column(sa.Unicode(128), nullable=False, default="") @property def partition_id(self): return "rcae_r_%s" % self.start_interval.strftime("%Y_%m") def es_doc(self): return { "resource_id": self.resource_id, "timestamp": self.start_interval, "pg_id": str(self.id), "permanent": True, "request_id": None, "log_level": "ERROR", "message": None, "namespace": "appenlight.error", "tags": { "duration": {"values": self.duration, "numeric_values": self.duration}, "occurences": { "values": self.occurences, "numeric_values": self.occurences, }, "group_id": {"values": self.group_id, "numeric_values": self.group_id}, "type": { "values": ReportType.key_from_value(self.type), "numeric_values": self.type, }, "server_name": {"values": self.server_name, "numeric_values": None}, "view_name": {"values": self.view_name, "numeric_values": None}, }, "tag_list": [ "duration", "occurences", "group_id", "type", "server_name", "view_name", ], }