Oleksii Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 1 | from django.core.files.storage import FileSystemStorage |
| 2 | from django.db import models |
Anna Arhipova | 22ea6bf | 2024-02-20 15:25:30 +0100 | [diff] [blame] | 3 | from django.utils.timezone import now, timedelta |
| 4 | from django_celery_beat.models import PeriodicTask |
Anna Arhipova | e9258f3 | 2023-11-04 12:31:19 +0100 | [diff] [blame] | 5 | |
| 6 | |
| 7 | class 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 Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 31 | |
| 32 | |
Anna Arhipova | 22ea6bf | 2024-02-20 15:25:30 +0100 | [diff] [blame] | 33 | def default_created_after(): |
| 34 | return now() + timedelta(days=-3 * 30) |
| 35 | |
| 36 | |
Oleksii Petrenko | 6826817 | 2020-09-28 16:58:13 +0300 | [diff] [blame] | 37 | class TestRailTestRun(models.Model): |
Anna Arhipova | e9258f3 | 2023-11-04 12:31:19 +0100 | [diff] [blame] | 38 | project_name = models.CharField(max_length=300, |
| 39 | default="Mirantis Cloud Platform") |
Sofiia Andriichenko | 4b440da | 2023-02-10 12:29:46 +0100 | [diff] [blame] | 40 | plan_name = models.CharField(max_length=300, default="[MCP2.0]OSCORE") |
| 41 | run_name = models.CharField(max_length=300, blank=True) |
Anna Arhipova | f1ea3ee | 2024-01-24 13:29:09 +0100 | [diff] [blame] | 42 | testrun_pattern = models.CharField(max_length=300, blank=True) |
Sofiia Andriichenko | 4b440da | 2023-02-10 12:29:46 +0100 | [diff] [blame] | 43 | run_id = models.CharField(max_length=300) |
Anna Arhipova | e9258f3 | 2023-11-04 12:31:19 +0100 | [diff] [blame] | 44 | checked_tests = IntegerListField(default=list()) |
Anna Arhipova | ec72522 | 2024-01-21 00:10:37 +0100 | [diff] [blame] | 45 | caching_tests_enabled = models.BooleanField(default=False) |
Sofiia Andriichenko | 4b440da | 2023-02-10 12:29:46 +0100 | [diff] [blame] | 46 | created_by_id = models.IntegerField(default='109') |
Oleksii Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 47 | filter_func = models.TextField(null=True, blank=True) |
Sofiia Andriichenko | 4b440da | 2023-02-10 12:29:46 +0100 | [diff] [blame] | 48 | ip_filter = models.BooleanField(default=True) |
| 49 | uuid_filter = models.BooleanField(default=True) |
Anna Arhipova | 5346159 | 2024-01-10 11:18:05 +0100 | [diff] [blame] | 50 | filter_last_traceback = models.BooleanField(default=True) |
| 51 | created_before = models.DateField(default=now) |
Anna Arhipova | 22ea6bf | 2024-02-20 15:25:30 +0100 | [diff] [blame] | 52 | created_after = models.DateField(default=default_created_after) |
Oleksii Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 53 | |
Anna Arhipova | e9258f3 | 2023-11-04 12:31:19 +0100 | [diff] [blame] | 54 | @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 Arhipova | 6276061 | 2023-11-28 23:20:38 +0100 | [diff] [blame] | 67 | "created_after": self.created_after, |
| 68 | "created_before": self.created_before, |
Anna Arhipova | f1ea3ee | 2024-01-24 13:29:09 +0100 | [diff] [blame] | 69 | "testrun_pattern": self.testrun_pattern, |
Anna Arhipova | e9258f3 | 2023-11-04 12:31:19 +0100 | [diff] [blame] | 70 | "plan_name": self.plan_name, |
Anna Arhipova | e9258f3 | 2023-11-04 12:31:19 +0100 | [diff] [blame] | 71 | } |
| 72 | |
Anna Arhipova | 614e5fc | 2024-02-27 18:17:15 +0100 | [diff] [blame] | 73 | class Meta: |
| 74 | ordering = ["-run_id"] |
| 75 | |
Oleksii Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 76 | |
| 77 | fs = FileSystemStorage() |
| 78 | |
| 79 | |
Oleksii Petrenko | 6826817 | 2020-09-28 16:58:13 +0300 | [diff] [blame] | 80 | class TestRailReport(models.Model): |
Oleksii Petrenko | 1de4bab | 2020-07-21 15:49:04 +0300 | [diff] [blame] | 81 | path = models.FileField(storage=fs, null=True, blank=True, max_length=500) |
Oleksii Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 82 | report_name = models.CharField(max_length=300) |
| 83 | finished = models.BooleanField(default=False) |
Oleksii Petrenko | 7118f8c | 2020-07-17 12:45:09 +0300 | [diff] [blame] | 84 | created_at = models.DateTimeField(auto_now_add=True) |
Oleksii Petrenko | 6826817 | 2020-09-28 16:58:13 +0300 | [diff] [blame] | 85 | |
| 86 | |
| 87 | class ActionLog(models.Model): |
| 88 | name = models.CharField(max_length=500) |
| 89 | date = models.DateTimeField(null=True) |
Anna Arhipova | 7cdcc85 | 2023-11-15 18:20:45 +0100 | [diff] [blame] | 90 | |
| 91 | |
| 92 | class SuitePassRate(models.Model): |
| 93 | SUITE_CHOICES = [ |
Anna Arhipova | 29ee618 | 2023-11-30 14:06:05 +0100 | [diff] [blame] | 94 | ("Tempest", ( |
| 95 | ("10651", "[MCP2.0_ROCKY]Tempest"), |
| 96 | ("10635", "[MCP2.0_STEIN]Tempest"), |
| 97 | ("10653", "[MCP2.0_TRAIN]Tempest"), |
| 98 | ("10710", "[MCP2.0_USSURI]Tempest"), |
| 99 | ("10888", "[MCP2.0_VICTORIA]Tempest"), |
| 100 | ("11167", "[MCP2.0_WALLABY]Tempest"), |
| 101 | ("11188", "[MCP2.0_XENA]Tempest"), |
| 102 | ("11170", "[MCP2.0_YOGA]Tempest"), |
| 103 | ("11192", "[MCP2.0_ANTELOPE]Tempest")) |
Anna Arhipova | ec72522 | 2024-01-21 00:10:37 +0100 | [diff] [blame] | 104 | ), |
Anna Arhipova | 29ee618 | 2023-11-30 14:06:05 +0100 | [diff] [blame] | 105 | ("Stepler", ( |
| 106 | ("10886", "[MCP2.0_USSURI]Stepler"), |
| 107 | ("10887", "[MCP2.0_VICTORIA]Stepler"), |
| 108 | ("11171", "[MCP2.0_YOGA]Stepler"), |
| 109 | ("11193", "[MCP2.0_ANTELOPE]Stepler")) |
Anna Arhipova | ec72522 | 2024-01-21 00:10:37 +0100 | [diff] [blame] | 110 | ), |
Anna Arhipova | 7cdcc85 | 2023-11-15 18:20:45 +0100 | [diff] [blame] | 111 | ] |
| 112 | suite_id = models.CharField(max_length=20, choices=SUITE_CHOICES) |
| 113 | suite_name = models.CharField(max_length=100, blank=True) |
| 114 | passrate_by_tests = models.JSONField(default="{}", blank=True) |
| 115 | status = models.TextField(max_length=300, blank=True) |
| 116 | finished = models.BooleanField(default=False, blank=True) |
| 117 | |
| 118 | |
| 119 | class DiffOfSuitesPassRates(models.Model): |
| 120 | limit = models.IntegerField(default=10, blank=True) |
| 121 | test_keyword = models.CharField(default="", max_length=300, blank=True) |
| 122 | report1 = models.ForeignKey(to=SuitePassRate, |
| 123 | related_name="report1", |
| 124 | on_delete=models.CASCADE, |
| 125 | blank=True) |
| 126 | report2 = models.ForeignKey(to=SuitePassRate, |
| 127 | related_name="report2", |
| 128 | on_delete=models.CASCADE, |
| 129 | blank=True) |
| 130 | started_at = models.DateTimeField(auto_created=True, |
| 131 | auto_now=True) |
Anna Arhipova | 22ea6bf | 2024-02-20 15:25:30 +0100 | [diff] [blame] | 132 | |
| 133 | |
Anna Arhipova | d2d4d9b | 2024-03-18 20:57:44 +0100 | [diff] [blame^] | 134 | TASKS = [ |
Anna Arhipova | 22ea6bf | 2024-02-20 15:25:30 +0100 | [diff] [blame] | 135 | ("control.celery_tasks.tasks.check_today_testplan", |
| 136 | "Check today testplan", |
| 137 | [] |
| 138 | ), |
Anna Arhipova | d2d4d9b | 2024-03-18 20:57:44 +0100 | [diff] [blame^] | 139 | ("control.celery_tasks.tasks.check_specific_testplan", |
| 140 | "Check specific testplan", |
| 141 | ["testplan_id_arg"] |
Anna Arhipova | 22ea6bf | 2024-02-20 15:25:30 +0100 | [diff] [blame] | 142 | ), |
| 143 | ] |
| 144 | |
Anna Arhipova | d2d4d9b | 2024-03-18 20:57:44 +0100 | [diff] [blame^] | 145 | TASK_CHOICES = list(map(lambda x: x[:-1], TASKS)) |
| 146 | |
Anna Arhipova | 22ea6bf | 2024-02-20 15:25:30 +0100 | [diff] [blame] | 147 | |
| 148 | class CronPeriodicTask(PeriodicTask): |
| 149 | cron = models.CharField(default="", |
| 150 | max_length=300, |
| 151 | blank=False) |
Anna Arhipova | d2d4d9b | 2024-03-18 20:57:44 +0100 | [diff] [blame^] | 152 | task_name = models.CharField(max_length=300, choices=TASK_CHOICES, |
| 153 | default=TASK_CHOICES[0][0]) |
| 154 | testplan_id_arg = models.CharField(max_length=30, blank=True, null=True) |
Anna Arhipova | 22ea6bf | 2024-02-20 15:25:30 +0100 | [diff] [blame] | 155 | |
| 156 | class Meta: |
| 157 | ordering = ["id"] |