1"""Automations models
2
3Revision ID: aeea5ee6f070
4Revises: 7a653837d9ba
5Create Date: 2024-04-03 11:24:09.599513
6
7"""
8
9from typing import List
10
11import sqlalchemy as sa
12from alembic import op
13
14import prefect
15from prefect.server.events.actions import ServerActionTypes
16from prefect.server.events.schemas.automations import Firing, ServerTriggerTypes
17from prefect.server.events.schemas.events import ReceivedEvent
18
19# revision identifiers, used by Alembic.
20revision = "aeea5ee6f070"
21down_revision = "7a653837d9ba"
22branch_labels = None
23depends_on = None
24
25
26def upgrade():
27 # ### commands auto generated by Alembic - please adjust! ###
28 op.create_table(
29 "automation",
30 sa.Column("name", sa.String(), nullable=False),
31 sa.Column("description", sa.String(), nullable=False),
32 sa.Column("enabled", sa.Boolean(), server_default="1", nullable=False),
33 sa.Column(
34 "trigger",
35 prefect.server.utilities.database.Pydantic(ServerTriggerTypes),
36 nullable=False,
37 ),
38 sa.Column(
39 "actions",
40 prefect.server.utilities.database.Pydantic(List[ServerActionTypes]),
41 nullable=False,
42 ),
43 sa.Column(
44 "actions_on_trigger",
45 prefect.server.utilities.database.Pydantic(List[ServerActionTypes]),
46 server_default="[]",
47 nullable=False,
48 ),
49 sa.Column(
50 "actions_on_resolve",
51 prefect.server.utilities.database.Pydantic(List[ServerActionTypes]),
52 server_default="[]",
53 nullable=False,
54 ),
55 sa.Column(
56 "id",
57 prefect.server.utilities.database.UUID(),
58 server_default=sa.text("(GEN_RANDOM_UUID())"),
59 nullable=False,
60 ),
61 sa.Column(
62 "created",
63 prefect.server.utilities.database.Timestamp(timezone=True),
64 server_default=sa.text("CURRENT_TIMESTAMP"),
65 nullable=False,
66 ),
67 sa.Column(
68 "updated",
69 prefect.server.utilities.database.Timestamp(timezone=True),
70 server_default=sa.text("CURRENT_TIMESTAMP"),
71 nullable=False,
72 ),
73 sa.PrimaryKeyConstraint("id", name=op.f("pk_automation")),
74 )
75 op.create_index(
76 op.f("ix_automation__updated"), "automation", ["updated"], unique=False
77 )
78 op.create_table(
79 "automation_bucket",
80 sa.Column(
81 "automation_id", prefect.server.utilities.database.UUID(), nullable=False
82 ),
83 sa.Column(
84 "trigger_id", prefect.server.utilities.database.UUID(), nullable=True
85 ),
86 sa.Column(
87 "bucketing_key",
88 prefect.server.utilities.database.JSON(astext_type=sa.Text()),
89 nullable=False,
90 ),
91 sa.Column(
92 "last_event",
93 prefect.server.utilities.database.Pydantic(ReceivedEvent),
94 nullable=True,
95 ),
96 sa.Column(
97 "start",
98 prefect.server.utilities.database.Timestamp(timezone=True),
99 nullable=False,
100 ),
101 sa.Column(
102 "end",
103 prefect.server.utilities.database.Timestamp(timezone=True),
104 nullable=False,
105 ),
106 sa.Column("count", sa.Integer(), nullable=False),
107 sa.Column("last_operation", sa.String(), nullable=True),
108 sa.Column(
109 "triggered_at",
110 prefect.server.utilities.database.Timestamp(timezone=True),
111 nullable=False,
112 ),
113 sa.Column(
114 "id",
115 prefect.server.utilities.database.UUID(),
116 server_default=sa.text("(GEN_RANDOM_UUID())"),
117 nullable=False,
118 ),
119 sa.Column(
120 "created",
121 prefect.server.utilities.database.Timestamp(timezone=True),
122 server_default=sa.text("CURRENT_TIMESTAMP"),
123 nullable=False,
124 ),
125 sa.Column(
126 "updated",
127 prefect.server.utilities.database.Timestamp(timezone=True),
128 server_default=sa.text("CURRENT_TIMESTAMP"),
129 nullable=False,
130 ),
131 sa.ForeignKeyConstraint(
132 ["automation_id"],
133 ["automation.id"],
134 name=op.f("fk_automation_bucket__automation_id__automation"),
135 ondelete="CASCADE",
136 ),
137 sa.PrimaryKeyConstraint("id", name=op.f("pk_automation_bucket")),
138 )
139 op.create_index(
140 "ix_automation_bucket__automation_id__end",
141 "automation_bucket",
142 ["automation_id", "end"],
143 unique=False,
144 )
145 op.create_index(
146 op.f("ix_automation_bucket__updated"),
147 "automation_bucket",
148 ["updated"],
149 unique=False,
150 )
151 op.create_index(
152 "uq_automation_bucket__automation_id__bucketing_key",
153 "automation_bucket",
154 ["automation_id", "bucketing_key"],
155 unique=True,
156 )
157 op.create_table(
158 "automation_related_resource",
159 sa.Column(
160 "automation_id", prefect.server.utilities.database.UUID(), nullable=False
161 ),
162 sa.Column("resource_id", sa.String(), nullable=True),
163 sa.Column(
164 "automation_owned_by_resource",
165 sa.Boolean(),
166 server_default="0",
167 nullable=False,
168 ),
169 sa.Column(
170 "id",
171 prefect.server.utilities.database.UUID(),
172 server_default=sa.text("(GEN_RANDOM_UUID())"),
173 nullable=False,
174 ),
175 sa.Column(
176 "created",
177 prefect.server.utilities.database.Timestamp(timezone=True),
178 server_default=sa.text("CURRENT_TIMESTAMP"),
179 nullable=False,
180 ),
181 sa.Column(
182 "updated",
183 prefect.server.utilities.database.Timestamp(timezone=True),
184 server_default=sa.text("CURRENT_TIMESTAMP"),
185 nullable=False,
186 ),
187 sa.ForeignKeyConstraint(
188 ["automation_id"],
189 ["automation.id"],
190 name=op.f("fk_automation_related_resource__automation_id__automation"),
191 ondelete="CASCADE",
192 ),
193 sa.PrimaryKeyConstraint("id", name=op.f("pk_automation_related_resource")),
194 )
195 op.create_index(
196 op.f("ix_automation_related_resource__resource_id"),
197 "automation_related_resource",
198 ["resource_id"],
199 unique=False,
200 )
201 op.create_index(
202 op.f("ix_automation_related_resource__updated"),
203 "automation_related_resource",
204 ["updated"],
205 unique=False,
206 )
207 op.create_index(
208 "uq_automation_related_resource__automation_id__resource_id",
209 "automation_related_resource",
210 ["automation_id", "resource_id"],
211 unique=True,
212 )
213 op.create_table(
214 "composite_trigger_child_firing",
215 sa.Column(
216 "automation_id", prefect.server.utilities.database.UUID(), nullable=False
217 ),
218 sa.Column(
219 "parent_trigger_id",
220 prefect.server.utilities.database.UUID(),
221 nullable=False,
222 ),
223 sa.Column(
224 "child_trigger_id", prefect.server.utilities.database.UUID(), nullable=False
225 ),
226 sa.Column(
227 "child_firing_id", prefect.server.utilities.database.UUID(), nullable=False
228 ),
229 sa.Column(
230 "child_fired_at",
231 prefect.server.utilities.database.Timestamp(timezone=True),
232 nullable=True,
233 ),
234 sa.Column(
235 "child_firing",
236 prefect.server.utilities.database.Pydantic(Firing),
237 nullable=False,
238 ),
239 sa.Column(
240 "id",
241 prefect.server.utilities.database.UUID(),
242 server_default=sa.text("(GEN_RANDOM_UUID())"),
243 nullable=False,
244 ),
245 sa.Column(
246 "created",
247 prefect.server.utilities.database.Timestamp(timezone=True),
248 server_default=sa.text("CURRENT_TIMESTAMP"),
249 nullable=False,
250 ),
251 sa.Column(
252 "updated",
253 prefect.server.utilities.database.Timestamp(timezone=True),
254 server_default=sa.text("CURRENT_TIMESTAMP"),
255 nullable=False,
256 ),
257 sa.ForeignKeyConstraint(
258 ["automation_id"],
259 ["automation.id"],
260 name=op.f("fk_composite_trigger_child_firing__automation_id__automation"),
261 ondelete="CASCADE",
262 ),
263 sa.PrimaryKeyConstraint("id", name=op.f("pk_composite_trigger_child_firing")),
264 )
265 op.create_index(
266 op.f("ix_composite_trigger_child_firing__updated"),
267 "composite_trigger_child_firing",
268 ["updated"],
269 unique=False,
270 )
271 op.create_index(
272 "uq_composite_trigger_child_firing__a_id__pt_id__ct__id",
273 "composite_trigger_child_firing",
274 ["automation_id", "parent_trigger_id", "child_trigger_id"],
275 unique=True,
276 )
277
278
279def downgrade():
280 op.drop_index(
281 "uq_composite_trigger_child_firing__a_id__pt_id__ct__id",
282 table_name="composite_trigger_child_firing",
283 )
284 op.drop_index(
285 op.f("ix_composite_trigger_child_firing__updated"),
286 table_name="composite_trigger_child_firing",
287 )
288 op.drop_table("composite_trigger_child_firing")
289 op.drop_index(
290 "uq_automation_related_resource__automation_id__resource_id",
291 table_name="automation_related_resource",
292 )
293 op.drop_index(
294 op.f("ix_automation_related_resource__updated"),
295 table_name="automation_related_resource",
296 )
297 op.drop_index(
298 op.f("ix_automation_related_resource__resource_id"),
299 table_name="automation_related_resource",
300 )
301 op.drop_table("automation_related_resource")
302 op.drop_index(
303 "uq_automation_bucket__automation_id__bucketing_key",
304 table_name="automation_bucket",
305 )
306 op.drop_index(op.f("ix_automation_bucket__updated"), table_name="automation_bucket")
307 op.drop_index(
308 "ix_automation_bucket__automation_id__end", table_name="automation_bucket"
309 )
310 op.drop_table("automation_bucket")
311 op.drop_index(op.f("ix_automation__updated"), table_name="automation")
312 op.drop_table("automation")
313 # ### end Alembic commands ###