firefighter-incident 0.0.11__py3-none-any.whl → 0.0.13__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
firefighter/_version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.0.11'
21
- __version_tuple__ = version_tuple = (0, 0, 11)
20
+ __version__ = version = '0.0.13'
21
+ __version_tuple__ = version_tuple = (0, 0, 13)
@@ -0,0 +1,67 @@
1
+ import logging
2
+
3
+ from django.db import migrations
4
+
5
+ logger = logging.getLogger(__name__)
6
+
7
+
8
+ def set_security_components_to_private(apps, schema_editor):
9
+ """Set all components belonging to the Security group as private, except 'Bot management & rate limiting & WAF'."""
10
+ Component = apps.get_model("incidents", "Component")
11
+ Group = apps.get_model("incidents", "Group")
12
+
13
+ try:
14
+ security_group = Group.objects.get(name="Security")
15
+ components = Component.objects.filter(group=security_group).exclude(
16
+ name="Bot management & rate limiting & WAF"
17
+ )
18
+
19
+ updated_count = 0
20
+ for component in components:
21
+ if not component.private:
22
+ logger.info(f"Setting component '{component.name}' to private")
23
+ component.private = True
24
+ component.save()
25
+ updated_count += 1
26
+
27
+ logger.info(f"Updated {updated_count} Security components to private")
28
+ except Group.DoesNotExist:
29
+ logger.warning("Security group not found, skipping migration")
30
+
31
+
32
+ def revert_security_components_to_public(apps, schema_editor):
33
+ """Revert all components belonging to the Security group to public, except 'Bot management & rate limiting & WAF'."""
34
+ Component = apps.get_model("incidents", "Component")
35
+ Group = apps.get_model("incidents", "Group")
36
+
37
+ try:
38
+ security_group = Group.objects.get(name="Security")
39
+ components = Component.objects.filter(group=security_group).exclude(
40
+ name="Bot management & rate limiting & WAF"
41
+ )
42
+
43
+ updated_count = 0
44
+ for component in components:
45
+ if component.private:
46
+ logger.info(f"Setting component '{component.name}' to public")
47
+ component.private = False
48
+ component.save()
49
+ updated_count += 1
50
+
51
+ logger.info(f"Reverted {updated_count} Security components to public")
52
+ except Group.DoesNotExist:
53
+ logger.warning("Security group not found, skipping reverse migration")
54
+
55
+
56
+ class Migration(migrations.Migration):
57
+
58
+ dependencies = [
59
+ ("incidents", "0018_update_impactlevel_names"),
60
+ ]
61
+
62
+ operations = [
63
+ migrations.RunPython(
64
+ set_security_components_to_private,
65
+ revert_security_components_to_public
66
+ ),
67
+ ]
@@ -38,7 +38,7 @@ def trigger_oncall(
38
38
  details = f"""Triggered from {APP_DISPLAY_NAME} incident #{incident.id} {f"by {triggered_by.full_name}" if triggered_by else ""}
39
39
  Priority: {incident.priority}
40
40
  Environment: {incident.environment}
41
- Component: {incident.component}
41
+ Issue category: {incident.component.group.name} - {incident.component.name}
42
42
  FireFighter page: {incident.status_page_url + "?utm_medium=FireFighter+PagerDuty&utm_source=PagerDuty+Incident&utm_campaign=OnCall+Message+In+Channel"}
43
43
  Slack channel #{incident.slack_channel_name}: {incident.slack_channel_url}
44
44
 
@@ -65,8 +65,8 @@ class RaidJiraClient(JiraClient):
65
65
  if priority is None:
66
66
  priority_value = "-"
67
67
  else:
68
- if not 1 <= priority <= 4:
69
- raise ValueError("Priority must be between 1 and 4")
68
+ if not 1 <= priority <= 5:
69
+ raise ValueError("Priority must be between 1 and 5")
70
70
  priority_value = str(priority)
71
71
  if area:
72
72
  extra_args["customfield_10920"] = str(area)
@@ -43,7 +43,7 @@ def create_ticket(
43
43
  description=f"""{incident.description}\n
44
44
  \n
45
45
  🧯 This incident has been created for a critical incident. Links below to Slack and {APP_DISPLAY_NAME}.\n
46
- 📦 Component: {incident.component.name} ({incident.component.group.name})\n
46
+ 📦 Issue category: {incident.component.name} ({incident.component.group.name})\n
47
47
  {incident.priority.emoji} Priority: {incident.priority.name}\n""",
48
48
  assignee=None,
49
49
  reporter=account_id,
@@ -210,7 +210,7 @@ class SlackMessageIncidentDeclaredAnnouncement(SlackMessageSurface):
210
210
  def get_blocks(self) -> list[Block]:
211
211
  fields = [
212
212
  f"{self.incident.priority.emoji} *Priority:* {self.incident.priority.name}",
213
- f":package: *Component:* {self.incident.component.name}",
213
+ f":package: *Issue category:* {self.incident.component.name}",
214
214
  f":speaking_head_in_silhouette: *Opened by:* {user_slack_handle_or_name(self.incident.created_by)}",
215
215
  f":calendar: *Created at:* {date_time(self.incident.created_at)}",
216
216
  f"{SLACK_APP_EMOJI} <{self.incident.status_page_url + '?utm_medium=FireFighter+Slack&utm_source=Slack+Message&utm_campaign=Announcement+Message+In+Channel'}|*{APP_DISPLAY_NAME} Status Page*>",
@@ -270,7 +270,7 @@ class SlackMessageIncidentDeclaredAnnouncementGeneral(SlackMessageSurface):
270
270
  def get_blocks(self) -> list[Block]:
271
271
  fields = [
272
272
  f"{self.incident.priority.emoji} *Priority:* {self.incident.priority.name}",
273
- f":package: *Component:* {self.incident.component.name}",
273
+ f":package: *Issue category:* {self.incident.component.name}",
274
274
  f"{SLACK_APP_EMOJI} <{self.incident.status_page_url + '?utm_medium=FireFighter+Slack&utm_source=Slack+Message&utm_campaign=Announcement+Message+General'}|*{APP_DISPLAY_NAME} Status Page*>",
275
275
  f":speaking_head_in_silhouette: *Opened by:* {user_slack_handle_or_name(self.incident.created_by)}",
276
276
  f":calendar: *Created at:* {date_time(self.incident.created_at)}",
@@ -486,7 +486,7 @@ class SlackMessageIncidentStatusUpdated(SlackMessageSurface):
486
486
  if self.incident_update.component:
487
487
  fields.append(
488
488
  MarkdownTextObject(
489
- text=f":package: *Component:* {self.incident.component.group.name} - {self.incident.component.name}"
489
+ text=f":package: *Issue category:* {self.incident.component.group.name} - {self.incident.component.name}"
490
490
  )
491
491
  )
492
492
  if self.incident_update.environment:
@@ -148,7 +148,7 @@ def _home_incident_element(
148
148
  text=f":rotating_light: *Priority:* {incident.priority.emoji} {incident.priority.name}"
149
149
  ),
150
150
  MarkdownTextObject(
151
- text=f":package: *Component:* {incident.component.group.name} - {incident.component.name}"
151
+ text=f":package: *Issue category:* {incident.component.group.name} - {incident.component.name}"
152
152
  ),
153
153
  MarkdownTextObject(
154
154
  text=f":speaking_head_in_silhouette: *Last update:* {date_time(incident.updated_at)}"
@@ -300,11 +300,11 @@ class OpenModal(SlackModal):
300
300
 
301
301
  if slack_msg is None:
302
302
  slack_msg = "> :slack: A dedicated Slack channel will be created, and responders will be invited to help.\n"
303
- text = f"> :firefighter_incident: This will trigger a critical incident response.\n{slack_msg}> :jira_new: An associated Jira ticket will also be created."
303
+ text = "> :jira_new: An associated Jira ticket will also be created."
304
304
  if not is_during_office_hours(timezone.now()):
305
305
  text += "\n> :pagerduty: If you need it, you'll be able to escalate the incident to our 24/7 on-call response teams."
306
306
  else:
307
- text = "> :raid_logo: This will trigger a normal incident response.\n> :jira_new: A Jira ticket will be created."
307
+ text = "> :jira_new: A Jira ticket will be created."
308
308
  done_review_blocks += [SectionBlock(text=text)]
309
309
 
310
310
  return done_review_blocks
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: firefighter-incident
3
- Version: 0.0.11
3
+ Version: 0.0.13
4
4
  Summary: Incident Management tool made for Slack using Django
5
5
  Project-URL: Repository, https://github.com/ManoManoTech/firefighter-incident
6
6
  Project-URL: Documentation, https://manomanotech.github.io/firefighter-incident/latest/
@@ -6,7 +6,7 @@ gunicorn.conf.py,sha256=vHsTGjaKOr8FDMp6fTKYTX4AtokmPgYvvt5Mr0Q6APc,273
6
6
  main.py,sha256=CsbprHoOYhjCLpTJmq9Z_aRYFoFgWxoz2pDLuwm8Eqg,1558
7
7
  manage.py,sha256=5ivHGD13C6nJ8QvltKsJ9T9akA5he8da70HLWaEP3k8,689
8
8
  firefighter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- firefighter/_version.py,sha256=rk0lhpp6Em5toAI4J7GwApfOdY7w_QTcFpJpUR4GdVY,513
9
+ firefighter/_version.py,sha256=qGWOla3klVyqOm_YOKHZibHNWUcX0sSXl2bsaNtaX9E,513
10
10
  firefighter/api/__init__.py,sha256=JQW0Bv6xwGqy7ioxx3h6UGMzkkJ4DntDpbvV1Ncgi8k,136
11
11
  firefighter/api/admin.py,sha256=x9Ysy-GiYjb0rynmFdS9g56e6n24fkN0ouGy5QD9Yrc,4629
12
12
  firefighter/api/apps.py,sha256=P5uU1_gMrDfzurdMbfqw1Bnb2uNKKcMq17WBPg2sLhc,204
@@ -163,6 +163,7 @@ firefighter/incidents/migrations/0015_update_impact_level.py,sha256=OQVTVrWvQ1or
163
163
  firefighter/incidents/migrations/0016_update_business_incidents_and_level.py,sha256=O5AL9twmjstSw44ndJ2-Og6dpKreReXVw_brpQb-t0w,3600
164
164
  firefighter/incidents/migrations/0017_reorder_impact_types.py,sha256=7NN2KjcDRHNInXyEh8YKZli2LWT_i0UHXBbI21dXB6w,877
165
165
  firefighter/incidents/migrations/0018_update_impactlevel_names.py,sha256=E37png_LiXABzuXk-vmxTgikw8YmULODkiytE2mkxT0,2227
166
+ firefighter/incidents/migrations/0019_set_security_components_private.py,sha256=hgQX2Yc7WIIdZVciQfjtQrXWYr1PpyFRc26vqBReDoA,2334
166
167
  firefighter/incidents/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
168
  firefighter/incidents/models/__init__.py,sha256=dCNP-zRYNNDOZB3JDDWp7vCl084Jh6RgDT_iP57RkOY,862
168
169
  firefighter/incidents/models/component.py,sha256=7GyXKNFk1MZns6RUGLpkNw5u6He7H9N1LexzXbG4sBM,7445
@@ -287,7 +288,7 @@ firefighter/pagerduty/tasks/__init__.py,sha256=7OtGthF6OX0Dmbe9U81Gk8h7A0dehfsJY
287
288
  firefighter/pagerduty/tasks/fetch_oncall.py,sha256=knoyHbBLUSrBsrWdv8UODPlByOOvqW5a5hInRa7-lGI,3952
288
289
  firefighter/pagerduty/tasks/fetch_services.py,sha256=GD3cCZtIBmI3mnRJnb4HdWeJwIm1X081gTIE0zAZvks,1268
289
290
  firefighter/pagerduty/tasks/fetch_users.py,sha256=wPFV9xR2xj3pNJlHPjM9BlX9I6E8hh7wfO29bH-Jz0k,2489
290
- firefighter/pagerduty/tasks/trigger_oncall.py,sha256=w40uEdZwsbjM_j40PqH8sJkaz3XiImeEkTGWbgmY7gU,3351
291
+ firefighter/pagerduty/tasks/trigger_oncall.py,sha256=tQbFlhYf0RMA4KIGU1E3s2f5rYxF6O06CvQiC_Af-9M,3395
291
292
  firefighter/pagerduty/templates/pages/oncall_list.html,sha256=fDgQnST-l5-CiIScQLAioT_ewb7Gs6yW0BWo4T_EDbE,4388
292
293
  firefighter/pagerduty/templates/pages/oncall_trigger.html,sha256=Un6BgHp8r52cCbqH8FJLI6criaHpzu6BtjJq10kJg4w,568
293
294
  firefighter/pagerduty/templates/partials/trigger_oncall_form_view.html,sha256=m3uIodbv3U76QGcGq5ijCQYwe-PvBY2ISXnEMksdlB4,450
@@ -298,7 +299,7 @@ firefighter/pagerduty/views/oncall_trigger.py,sha256=LYHpWyEaR6O8NazmsTl5ydtw1XH
298
299
  firefighter/raid/__init__.py,sha256=nMNmvHCSkyLQsdhTow7myMU62vXk1e755gUntVfFFlY,154
299
300
  firefighter/raid/admin.py,sha256=YaqjJ7UcoEf_72kKVVN-O2Pp7_9lGuUdc-nHSQZYEYM,1405
300
301
  firefighter/raid/apps.py,sha256=BUkaZSu45Ghdpx1XnE3DaFD4SC2SeUtSDZOTYynte5k,1655
301
- firefighter/raid/client.py,sha256=JCeuKO2j1EYRHEKWn89fl9vF7KjW5XQVsu9MYrVOi48,7993
302
+ firefighter/raid/client.py,sha256=Y-aAXbVC_seyo4CfBF5CoiTAu36Jq3XKBTsXTLJGFH0,7993
302
303
  firefighter/raid/forms.py,sha256=oJOPHYFtwlffuPgFi4lbbOCoKhwianrvafNicOmT_-c,15816
303
304
  firefighter/raid/messages.py,sha256=e75kwi0hCe5ChwU4t-_6Q3Rcy22MLLdVSsYyjvG2SCM,5542
304
305
  firefighter/raid/models.py,sha256=FNfPHvlF9h09LxL2a4zFPfc0raArmufywjzTdqGATms,2662
@@ -312,7 +313,7 @@ firefighter/raid/migrations/0001_initial_oss.py,sha256=oZQ44dHboLeHbvVyziHX_hhdi
312
313
  firefighter/raid/migrations/0002_featureteam_remove_qualifierrotation_jira_user_and_more.py,sha256=1UkwuNqqjtRJ_xlgNMs9qn2ryLcssQN06ZBCL296CWw,1034
313
314
  firefighter/raid/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
314
315
  firefighter/raid/signals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
315
- firefighter/raid/signals/incident_created.py,sha256=CjW09nPB-L0YKJRIX8DyGO29VKFjBP8DptPLnmUrRtE,3735
316
+ firefighter/raid/signals/incident_created.py,sha256=ksXsjiEU-PgEf30XwEXWd7nbrWMXZgwfidiaYvCaOT8,3740
316
317
  firefighter/raid/signals/incident_updated.py,sha256=cLiqgCIKjGZpvkb7w3ASDtJ8tWP4agFpmgfmDnT3xOs,1330
317
318
  firefighter/raid/tasks/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
318
319
  firefighter/raid/views/__init__.py,sha256=a-ZiWaudIAH1OkR7FAFSMtasQ1SaB-lfoKJoArKraCM,5182
@@ -334,7 +335,7 @@ firefighter/slack/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCe
334
335
  firefighter/slack/management/commands/generate_manifest.py,sha256=zFWHAC7ioozcDdhJ5KrLU4JNhULdtYjBUJTtclgBgSo,6911
335
336
  firefighter/slack/messages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
336
337
  firefighter/slack/messages/base.py,sha256=biH-YEAaldJ-OLHEs5ZjW-gtUYUbjOqxrAEflqV2XS0,4593
337
- firefighter/slack/messages/slack_messages.py,sha256=8iYBfRDJw74wl_b5c5A-8_wJBNrTxBrTU8xjH9Lc7mI,33057
338
+ firefighter/slack/messages/slack_messages.py,sha256=yzxN0v-G0KNlz-rA6va9MlweOZxCTJhgjfQl662F0dc,33072
338
339
  firefighter/slack/migrations/0001_initial_oss.py,sha256=XmTPgq7zCME2xDwzRFoVi4OegSIG9eSKoyTNoW05Qtg,12933
339
340
  firefighter/slack/migrations/0002_usergroup_tag.py,sha256=098tmGA81mT-R2uhb6uQfZ7gKiRG9bFhEwQ8rrp4SKM,583
340
341
  firefighter/slack/migrations/0003_alter_usergroup_tag.py,sha256=ncH3KUWEPZHlbdcAtOJ0KGt5H6EX-cKspTGU3osrAhE,591
@@ -374,7 +375,7 @@ firefighter/slack/views/events/channel_shared.py,sha256=179KUJ8wZ1hPFXF58Neh3njJ
374
375
  firefighter/slack/views/events/channel_unarchive.py,sha256=YSwMz9H5CeXXeLOUHWI6uAIS4q_oxe4fyMJ9ha0-fuk,968
375
376
  firefighter/slack/views/events/channel_unshared.py,sha256=attB5woORof1OOECyfAbxLqL0QrUtdSVfOdEIjS4YgU,734
376
377
  firefighter/slack/views/events/commands.py,sha256=M65X9gtjKOQtbuMuWoeJHqyskw6J0bgNUwyjydVmxLY,4827
377
- firefighter/slack/views/events/home.py,sha256=RZc9KXIUobwbHfKr0ebssESXjCRqKQEIYAxPP2GXfAk,6410
378
+ firefighter/slack/views/events/home.py,sha256=xqQeLfxfvcRrjT-JPou3ddbRSKGTZvnyLfokxHh_K_I,6415
378
379
  firefighter/slack/views/events/member_joined_channel.py,sha256=BJySHHTAuDotyRK0TXBiyqzZXsEDZGKM_4KILdXUr5g,2370
379
380
  firefighter/slack/views/events/member_left_channel.py,sha256=49CQxYvjJwFEBnnpgrLl8WFk8ArOrj-L7GPNIlULQVw,2181
380
381
  firefighter/slack/views/events/message.py,sha256=c8tvo0btOUu_5Bc83oiO3IQbaEyoRiUWFk118yqF90g,2068
@@ -385,7 +386,7 @@ firefighter/slack/views/modals/close.py,sha256=ur1SSRWk9NYFfL24gjOqoIiXKquDy6qeE
385
386
  firefighter/slack/views/modals/downgrade_workflow.py,sha256=S0y0_GYH4q7ewZUr_eA9Ly2c1FQueZzNCTiuIiWYUoY,3109
386
387
  firefighter/slack/views/modals/edit.py,sha256=60xav4XG4KGS9KknqsQNCQjl3qQzk7OtmHiEYTQ9pUk,3861
387
388
  firefighter/slack/views/modals/key_event_message.py,sha256=ga3-ITZyzJExwzctX-GfgnDqyQaxTfcqpqnOwY2E38M,5620
388
- firefighter/slack/views/modals/open.py,sha256=LX9aBZ4bUosoffJlIepzYjpbf7LsvzppYAjqep8tVtM,25495
389
+ firefighter/slack/views/modals/open.py,sha256=en8F0T36A1FbdEaLKEWAuV8Vr5D47x9S1KdtRa_0Kg8,25348
389
390
  firefighter/slack/views/modals/postmortem.py,sha256=AeEtmiam_XgCRxDmltKluNT2VN1gcuCB2VbYeeATVcA,2525
390
391
  firefighter/slack/views/modals/select.py,sha256=Y-Ji_ALnzhYkXDBAyi497UL1Xn2vCGqXCtj8eog75Jk,3312
391
392
  firefighter/slack/views/modals/send_sos.py,sha256=bP6HgYyDwPrIcTq7n_sQz6UQsxhYbvBDS4HjM0uRccA,4838
@@ -448,8 +449,8 @@ firefighter_tests/test_slack/views/modals/test_open.py,sha256=z3lvAPOXCUSt7i_9jW
448
449
  firefighter_tests/test_slack/views/modals/test_send_sos.py,sha256=_rE6jD-gOzcGyhlY0R9GzlGtPx65oOOguJYdENgxtLc,1289
449
450
  firefighter_tests/test_slack/views/modals/test_status.py,sha256=oQzPfwdg2tkbo9nfkO1GfS3WydxqSC6vy1AZjZDKT30,2226
450
451
  firefighter_tests/test_slack/views/modals/test_update_status.py,sha256=Y8Oa_fraj1vtaGig9Y28_6tOWvMrRPS-wyg3rY-DHBk,39380
451
- firefighter_incident-0.0.11.dist-info/METADATA,sha256=9Xvtj0AnQmzza1kfVGGGEMcJJEokzGn9vUs6FzslagA,5488
452
- firefighter_incident-0.0.11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
453
- firefighter_incident-0.0.11.dist-info/entry_points.txt,sha256=c13meJbv7YNmYz7MipMOQwzQ5IeFOPXUBYAJ44XMQsM,61
454
- firefighter_incident-0.0.11.dist-info/licenses/LICENSE,sha256=krRiGp-a9-1nH1bWpBEdxyTKLhjLmn6DMVVoIb0zF90,1087
455
- firefighter_incident-0.0.11.dist-info/RECORD,,
452
+ firefighter_incident-0.0.13.dist-info/METADATA,sha256=EF5mZjZdNgypTxb3lZVVcu1HAxfEVPDZ4mSvJoyyYvI,5488
453
+ firefighter_incident-0.0.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
454
+ firefighter_incident-0.0.13.dist-info/entry_points.txt,sha256=c13meJbv7YNmYz7MipMOQwzQ5IeFOPXUBYAJ44XMQsM,61
455
+ firefighter_incident-0.0.13.dist-info/licenses/LICENSE,sha256=krRiGp-a9-1nH1bWpBEdxyTKLhjLmn6DMVVoIb0zF90,1087
456
+ firefighter_incident-0.0.13.dist-info/RECORD,,