blob: a8a0910a3cf65c67a04511a1ede692bb2af1527f [file] [log] [blame]
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +03001from django.core.files.storage import FileSystemStorage
2from django.db import models
Anna Arhipova22ea6bf2024-02-20 15:25:30 +01003from django.utils.timezone import now, timedelta
4from django_celery_beat.models import PeriodicTask
Anna Arhipovae9258f32023-11-04 12:31:19 +01005
6
7class IntegerListField(models.Field):
8 def __init__(self, *args, **kwargs):
9 kwargs['editable'] = False
10 super(IntegerListField, self).__init__(*args, **kwargs)
11
12 def db_type(self, connection):
13 return 'text'
14
15 def from_db_value(self, value, expression, connection):
16 if not value:
17 return []
18 return [int(x) for x in value.split(',')]
19
20 def to_python(self, value):
21 if isinstance(value, list):
22 return value
23 if not value:
24 return []
25 return [int(x) for x in value.split(',')]
26
27 def get_prep_value(self, value):
28 if not value:
29 return ''
30 return ','.join(str(int(x)) for x in value)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030031
32
Anna Arhipova22ea6bf2024-02-20 15:25:30 +010033def default_created_after():
34 return now() + timedelta(days=-3 * 30)
35
36
Oleksii Petrenko68268172020-09-28 16:58:13 +030037class TestRailTestRun(models.Model):
Anna Arhipovae9258f32023-11-04 12:31:19 +010038 project_name = models.CharField(max_length=300,
39 default="Mirantis Cloud Platform")
Sofiia Andriichenko4b440da2023-02-10 12:29:46 +010040 plan_name = models.CharField(max_length=300, default="[MCP2.0]OSCORE")
41 run_name = models.CharField(max_length=300, blank=True)
Anna Arhipovaf1ea3ee2024-01-24 13:29:09 +010042 testrun_pattern = models.CharField(max_length=300, blank=True)
Sofiia Andriichenko4b440da2023-02-10 12:29:46 +010043 run_id = models.CharField(max_length=300)
Anna Arhipovae9258f32023-11-04 12:31:19 +010044 checked_tests = IntegerListField(default=list())
Anna Arhipovaec725222024-01-21 00:10:37 +010045 caching_tests_enabled = models.BooleanField(default=False)
Sofiia Andriichenko4b440da2023-02-10 12:29:46 +010046 created_by_id = models.IntegerField(default='109')
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030047 filter_func = models.TextField(null=True, blank=True)
Sofiia Andriichenko4b440da2023-02-10 12:29:46 +010048 ip_filter = models.BooleanField(default=True)
49 uuid_filter = models.BooleanField(default=True)
Anna Arhipova53461592024-01-10 11:18:05 +010050 filter_last_traceback = models.BooleanField(default=True)
51 created_before = models.DateField(default=now)
Anna Arhipova22ea6bf2024-02-20 15:25:30 +010052 created_after = models.DateField(default=default_created_after)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030053
Anna Arhipovae9258f32023-11-04 12:31:19 +010054 @property
55 def text_filters(self):
56 return {
57 "filter_last_traceback": self.filter_last_traceback,
58 "uuid_filter": self.uuid_filter,
59 "ip_filter": self.ip_filter,
60 "filter_func": self.filter_func,
61 }
62
63 @property
64 def testrail_filters(self):
65 return {
66 "created_by_id": self.created_by_id,
Anna Arhipova62760612023-11-28 23:20:38 +010067 "created_after": self.created_after,
68 "created_before": self.created_before,
Anna Arhipovaf1ea3ee2024-01-24 13:29:09 +010069 "testrun_pattern": self.testrun_pattern,
Anna Arhipovae9258f32023-11-04 12:31:19 +010070 "plan_name": self.plan_name,
Anna Arhipovae9258f32023-11-04 12:31:19 +010071 }
72
Anna Arhipova614e5fc2024-02-27 18:17:15 +010073 class Meta:
74 ordering = ["-run_id"]
75
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030076
77fs = FileSystemStorage()
78
79
Oleksii Petrenko68268172020-09-28 16:58:13 +030080class TestRailReport(models.Model):
Oleksii Petrenko1de4bab2020-07-21 15:49:04 +030081 path = models.FileField(storage=fs, null=True, blank=True, max_length=500)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030082 report_name = models.CharField(max_length=300)
83 finished = models.BooleanField(default=False)
Oleksii Petrenko7118f8c2020-07-17 12:45:09 +030084 created_at = models.DateTimeField(auto_now_add=True)
Oleksii Petrenko68268172020-09-28 16:58:13 +030085
86
87class ActionLog(models.Model):
88 name = models.CharField(max_length=500)
89 date = models.DateTimeField(null=True)
Anna Arhipova7cdcc852023-11-15 18:20:45 +010090
91
92class SuitePassRate(models.Model):
93 SUITE_CHOICES = [
Anna Arhipova29ee6182023-11-30 14:06:05 +010094 ("Tempest", (
Pavel Glazov0bf314e2024-05-30 02:35:44 -070095 ("10650", "[MCP2.0_QUEENS]Tempest"),
Anna Arhipova29ee6182023-11-30 14:06:05 +010096 ("10651", "[MCP2.0_ROCKY]Tempest"),
97 ("10635", "[MCP2.0_STEIN]Tempest"),
98 ("10653", "[MCP2.0_TRAIN]Tempest"),
99 ("10710", "[MCP2.0_USSURI]Tempest"),
100 ("10888", "[MCP2.0_VICTORIA]Tempest"),
101 ("11167", "[MCP2.0_WALLABY]Tempest"),
102 ("11188", "[MCP2.0_XENA]Tempest"),
103 ("11170", "[MCP2.0_YOGA]Tempest"),
Pavel Glazov0bf314e2024-05-30 02:35:44 -0700104 ("11192", "[MCP2.0_ANTELOPE]Tempest"),
105 ("11195", "[MCP2.0_CARACAL]Tempest"))
Anna Arhipovaec725222024-01-21 00:10:37 +0100106 ),
Anna Arhipova29ee6182023-11-30 14:06:05 +0100107 ("Stepler", (
108 ("10886", "[MCP2.0_USSURI]Stepler"),
109 ("10887", "[MCP2.0_VICTORIA]Stepler"),
110 ("11171", "[MCP2.0_YOGA]Stepler"),
Pavel Glazov0bf314e2024-05-30 02:35:44 -0700111 ("11193", "[MCP2.0_ANTELOPE]Stepler"),
112 ("11196", "[MCP2.0_CARACAL]Stepler"))
Anna Arhipovaec725222024-01-21 00:10:37 +0100113 ),
Anna Arhipova7cdcc852023-11-15 18:20:45 +0100114 ]
115 suite_id = models.CharField(max_length=20, choices=SUITE_CHOICES)
116 suite_name = models.CharField(max_length=100, blank=True)
117 passrate_by_tests = models.JSONField(default="{}", blank=True)
118 status = models.TextField(max_length=300, blank=True)
119 finished = models.BooleanField(default=False, blank=True)
120
121
122class DiffOfSuitesPassRates(models.Model):
123 limit = models.IntegerField(default=10, blank=True)
124 test_keyword = models.CharField(default="", max_length=300, blank=True)
125 report1 = models.ForeignKey(to=SuitePassRate,
126 related_name="report1",
127 on_delete=models.CASCADE,
128 blank=True)
129 report2 = models.ForeignKey(to=SuitePassRate,
130 related_name="report2",
131 on_delete=models.CASCADE,
132 blank=True)
133 started_at = models.DateTimeField(auto_created=True,
134 auto_now=True)
Anna Arhipova22ea6bf2024-02-20 15:25:30 +0100135
136
Anna Arhipovad2d4d9b2024-03-18 20:57:44 +0100137TASKS = [
Anna Arhipova22ea6bf2024-02-20 15:25:30 +0100138 ("control.celery_tasks.tasks.check_today_testplan",
139 "Check today testplan",
140 []
141 ),
Anna Arhipovad2d4d9b2024-03-18 20:57:44 +0100142 ("control.celery_tasks.tasks.check_specific_testplan",
143 "Check specific testplan",
144 ["testplan_id_arg"]
Anna Arhipova22ea6bf2024-02-20 15:25:30 +0100145 ),
146 ]
147
Anna Arhipovad2d4d9b2024-03-18 20:57:44 +0100148TASK_CHOICES = list(map(lambda x: x[:-1], TASKS))
149
Anna Arhipova22ea6bf2024-02-20 15:25:30 +0100150
151class CronPeriodicTask(PeriodicTask):
152 cron = models.CharField(default="",
153 max_length=300,
154 blank=False)
Anna Arhipovad2d4d9b2024-03-18 20:57:44 +0100155 task_name = models.CharField(max_length=300, choices=TASK_CHOICES,
156 default=TASK_CHOICES[0][0])
157 testplan_id_arg = models.CharField(max_length=30, blank=True, null=True)
Anna Arhipova22ea6bf2024-02-20 15:25:30 +0100158
159 class Meta:
160 ordering = ["id"]