# What this PR does This PR adds [django-migration-linter](https://github.com/3YOURMIND/django-migration-linter) to keep database migrations backwards compatible - we can automatically run migrations and they are zero-downtime, e.g. old code can work with the migrated database - we can run and rollback migrations without worrying about data safety - OnCall is deployed to the multiple environments core team is not able to control See [django-migration-linter checklist](https://github.com/3YOURMIND/django-migration-linter/blob/main/docs/incompatibilities.md) for the common mistakes and best practices ## Which issue(s) this PR fixes ## Checklist - [ ] Tests updated - [ ] Documentation added - [ ] `CHANGELOG.md` updated --------- Co-authored-by: Joey Orlando <joey.orlando@grafana.com>
109 lines
7.2 KiB
Python
109 lines
7.2 KiB
Python
# Generated by Django 3.2.5 on 2022-05-31 14:46
|
|
|
|
import apps.user_management.models.organization
|
|
import apps.user_management.models.team
|
|
import apps.user_management.models.user
|
|
import datetime
|
|
import django.core.validators
|
|
from django.db import migrations, models
|
|
import django.db.models.deletion
|
|
import mirage.fields
|
|
import django_migration_linter as linter
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
initial = True
|
|
|
|
dependencies = [
|
|
('alerts', '0001_squashed_initial'),
|
|
('slack', '0001_squashed_initial'),
|
|
]
|
|
|
|
operations = [
|
|
linter.IgnoreMigration(),
|
|
migrations.CreateModel(
|
|
name='Organization',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('maintenance_duration', models.DurationField(choices=[(datetime.timedelta(seconds=3600), '1 hour'), (datetime.timedelta(seconds=10800), '3 hours'), (datetime.timedelta(seconds=21600), '6 hours'), (datetime.timedelta(seconds=43200), '12 hours'), (datetime.timedelta(days=1), '24 hours')], default=None, null=True)),
|
|
('maintenance_mode', models.IntegerField(choices=[(0, 'Debug'), (1, 'Maintenance')], default=None, null=True)),
|
|
('maintenance_uuid', models.CharField(default=None, max_length=250, null=True, unique=True)),
|
|
('maintenance_started_at', models.DateTimeField(default=None, null=True)),
|
|
('public_primary_key', models.CharField(default=apps.user_management.models.organization.generate_public_primary_key_for_organization, max_length=20, unique=True, validators=[django.core.validators.MinLengthValidator(13)])),
|
|
('stack_id', models.PositiveIntegerField()),
|
|
('org_id', models.PositiveIntegerField()),
|
|
('stack_slug', models.CharField(max_length=300)),
|
|
('org_slug', models.CharField(max_length=300)),
|
|
('org_title', models.CharField(max_length=300)),
|
|
('grafana_url', models.URLField()),
|
|
('api_token', mirage.fields.EncryptedCharField(max_length=300)),
|
|
('api_token_status', models.IntegerField(choices=[(0, 'API Token Status Pending'), (1, 'API Token Status Ok'), (2, 'API Token Status Failed')], default=0)),
|
|
('gcom_token', mirage.fields.EncryptedCharField(default=None, max_length=300, null=True)),
|
|
('gcom_token_org_last_time_synced', models.DateTimeField(default=None, null=True)),
|
|
('last_time_synced', models.DateTimeField(default=None, null=True)),
|
|
('is_resolution_note_required', models.BooleanField(default=False)),
|
|
('archive_alerts_from', models.DateField(default='1970-01-01')),
|
|
('general_log_channel_id', models.CharField(default=None, max_length=100, null=True)),
|
|
('acknowledge_remind_timeout', models.IntegerField(choices=[(0, 'Never remind about ack-ed incidents'), (1, 'Remind every 1 hour'), (2, 'Remind every 3 hours'), (3, 'Remind every 5 hours'), (4, 'Remind every 10 hours')], default=0)),
|
|
('unacknowledge_timeout', models.IntegerField(choices=[(0, 'and never unack'), (1, 'and unack in 5 min if no response'), (2, 'and unack in 15 min if no response'), (3, 'and unack in 30 min if no response'), (4, 'and unack in 45 min if no response')], default=0)),
|
|
('datetime', models.DateTimeField(auto_now_add=True)),
|
|
('pricing_version', models.PositiveIntegerField(choices=[(0, 'Free public beta')], default=0)),
|
|
('is_amixr_migration_started', models.BooleanField(default=False)),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='Team',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('public_primary_key', models.CharField(default=apps.user_management.models.team.generate_public_primary_key_for_team, max_length=20, unique=True, validators=[django.core.validators.MinLengthValidator(13)])),
|
|
('team_id', models.PositiveIntegerField()),
|
|
('name', models.CharField(max_length=300)),
|
|
('email', models.CharField(blank=True, default=None, max_length=300, null=True)),
|
|
('avatar_url', models.URLField()),
|
|
('organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='teams', to='user_management.organization')),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='User',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('public_primary_key', models.CharField(default=apps.user_management.models.user.generate_public_primary_key_for_user, max_length=20, unique=True, validators=[django.core.validators.MinLengthValidator(13)])),
|
|
('user_id', models.PositiveIntegerField()),
|
|
('email', models.EmailField(max_length=254)),
|
|
('name', models.CharField(max_length=300)),
|
|
('username', models.CharField(max_length=300)),
|
|
('role', models.PositiveSmallIntegerField(choices=[(0, 'ADMIN'), (1, 'EDITOR'), (2, 'VIEWER')])),
|
|
('avatar_url', models.URLField()),
|
|
('unverified_phone_number', models.CharField(default=None, max_length=20, null=True)),
|
|
('_verified_phone_number', models.CharField(default=None, max_length=20, null=True)),
|
|
('is_active', models.BooleanField(default=True, null=True)),
|
|
('current_team', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='user_management.team')),
|
|
('notification', models.ManyToManyField(through='alerts.UserHasNotification', to='alerts.AlertGroup')),
|
|
('organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='users', to='user_management.organization')),
|
|
('slack_user_identity', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='users', to='slack.slackuseridentity')),
|
|
],
|
|
options={
|
|
'unique_together': {('user_id', 'organization', 'is_active')},
|
|
},
|
|
),
|
|
migrations.AddField(
|
|
model_name='team',
|
|
name='users',
|
|
field=models.ManyToManyField(related_name='teams', to='user_management.User'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='organization',
|
|
name='maintenance_author',
|
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='organization_maintenances_created', to='user_management.user'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='organization',
|
|
name='slack_team_identity',
|
|
field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='organizations', to='slack.slackteamidentity'),
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='organization',
|
|
unique_together={('stack_id', 'org_id')},
|
|
),
|
|
]
|