Files
2026-06-16 11:55:14 +08:00

115 lines
4.4 KiB
Python

from rest_framework import serializers
from gvsds.common.Serializer import PascalCaseSerializer, PascalCaseModelSerializer
from gvsds.apps.stats.models import (
StatMetric, StatDimension, StatRecord, StatRanking, StatConfig,
)
class StatMetricSerializer(PascalCaseModelSerializer):
class Meta:
model = StatMetric
fields = ['MetricUUID', 'MetricCode', 'MetricName', 'MetricType', 'Unit', 'MetricStatus', 'CreateTime']
read_only_fields = ['MetricUUID', 'CreateTime']
class StatDimensionSerializer(PascalCaseModelSerializer):
class Meta:
model = StatDimension
fields = ['DimensionUUID', 'DimensionCode', 'DimensionName', 'DimensionStatus', 'CreateTime']
read_only_fields = ['DimensionUUID', 'CreateTime']
class StatRecordSerializer(PascalCaseModelSerializer):
MetricCode = serializers.CharField(source='Metric.MetricCode', read_only=True)
class Meta:
model = StatRecord
fields = ['RecordUUID', 'PeriodType', 'PeriodKey', 'MetricCode', 'DimensionValues', 'Value', 'UpdateTime', 'CreateTime']
read_only_fields = ['RecordUUID', 'UpdateTime', 'CreateTime']
class StatRankingSerializer(PascalCaseModelSerializer):
MetricCode = serializers.CharField(source='Metric.MetricCode', read_only=True)
class Meta:
model = StatRanking
fields = ['RankingUUID', 'RankingPeriod', 'RankingDate', 'MetricCode', 'DimensionFilter', 'TargetID', 'Rank', 'RankValue', 'TargetName', 'TargetAvatar', 'CreateTime']
read_only_fields = ['RankingUUID', 'CreateTime']
class StatConfigSerializer(PascalCaseModelSerializer):
MetricCode = serializers.CharField(source='Metric.MetricCode', read_only=True)
class Meta:
model = StatConfig
fields = ['ConfigUUID', 'MetricCode', 'AutoReset', 'ResetCron', 'EnableRanking', 'RankingTopN', 'RankingSortOrder', 'RetentionDays', 'ConfigStatus', 'CreateTime']
read_only_fields = ['ConfigUUID', 'CreateTime']
class MetricDefineSerializer(PascalCaseSerializer):
MetricCode = serializers.CharField()
MetricName = serializers.CharField()
MetricType = serializers.CharField(default='count')
Unit = serializers.CharField(default='次')
DefaultValue = serializers.DecimalField(max_digits=18, decimal_places=4, default=0)
class DimensionDefineSerializer(PascalCaseSerializer):
DimensionCode = serializers.CharField()
DimensionName = serializers.CharField()
class IncrementSerializer(PascalCaseSerializer):
MetricUUID = serializers.CharField()
DimensionValues = serializers.DictField()
Delta = serializers.DecimalField(max_digits=18, decimal_places=4, default=1)
Date = serializers.DateField(required=False)
PeriodType = serializers.CharField(default='daily')
class IncrementMultiSerializer(PascalCaseSerializer):
Increments = serializers.ListField()
Date = serializers.DateField(required=False)
class StatQuerySerializer(PascalCaseSerializer):
MetricUUID = serializers.CharField()
Date = serializers.DateField(required=False)
StartDate = serializers.DateField(required=False)
EndDate = serializers.DateField(required=False)
DimensionFilter = serializers.DictField(required=False)
PeriodType = serializers.CharField(default='daily')
class RankingGenerateSerializer(PascalCaseSerializer):
MetricUUID = serializers.CharField()
RankingDate = serializers.DateField(required=False)
DimensionFilter = serializers.DictField(required=False)
TopN = serializers.IntegerField(default=50)
class RankingQuerySerializer(PascalCaseSerializer):
RankingPeriod = serializers.CharField(default='daily')
RankingDate = serializers.DateField(required=False)
MetricUUID = serializers.CharField(required=False)
TopN = serializers.IntegerField(required=False)
class ResetSerializer(PascalCaseSerializer):
MetricUUID = serializers.CharField()
TargetDate = serializers.DateField(required=False)
class PurgeSerializer(PascalCaseSerializer):
BeforeDate = serializers.DateField()
PeriodType = serializers.CharField(default='daily')
class ConfigSerializer(PascalCaseSerializer):
MetricUUID = serializers.CharField()
AutoReset = serializers.BooleanField(default=True)
ResetCron = serializers.CharField(default='0 0 * * *')
EnableRanking = serializers.BooleanField(default=False)
RankingTopN = serializers.IntegerField(default=50)
RankingDimensionFilter = serializers.DictField(required=False)
RetentionDays = serializers.IntegerField(default=365)