-
Notifications
You must be signed in to change notification settings - Fork 429
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add descriptive event title to dynatrace integration (#2424)
* Refactor audit log integrations to receive audit log record * WIP: add deployment name * Add deployment name logic * Linting fixes * Fix tests * Update test to cover all related object types * Remove unnecessary additions to datadog test
- Loading branch information
1 parent
61001ef
commit f1dba53
Showing
11 changed files
with
262 additions
and
89 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,6 +2,8 @@ | |
|
||
import pytest | ||
|
||
from audit.models import AuditLog | ||
from environments.models import Environment | ||
from integrations.datadog.datadog import EVENTS_API_URI, DataDogWrapper | ||
|
||
|
||
|
@@ -42,59 +44,69 @@ def test_datadog_track_event(mocker): | |
) | ||
|
||
|
||
def test_datadog_when_generate_event_data_with_correct_values_then_success(): | ||
def test_datadog_when_generate_event_data_with_correct_values_then_success( | ||
django_user_model, | ||
feature, | ||
): | ||
# Given | ||
log = "some log data" | ||
email = "[email protected]" | ||
env = "test" | ||
|
||
author = django_user_model(email="[email protected]") | ||
environment = Environment(name="test") | ||
|
||
audit_log_record = AuditLog(log=log, author=author, environment=environment) | ||
|
||
data_dog = DataDogWrapper(base_url="http://test.com", api_key="123key") | ||
|
||
# When | ||
event_data = data_dog.generate_event_data( | ||
log=log, email=email, environment_name=env | ||
) | ||
event_data = data_dog.generate_event_data(audit_log_record=audit_log_record) | ||
|
||
# Then | ||
expected_event_text = f"{log} by user {email}" | ||
expected_event_text = f"{log} by user {author.email}" | ||
|
||
assert event_data["text"] == expected_event_text | ||
assert len(event_data["tags"]) == 1 | ||
assert event_data["tags"][0] == "env:" + env | ||
assert event_data["tags"][0] == f"env:{environment.name}" | ||
|
||
|
||
def test_datadog_when_generate_event_data_with_missing_author_then_success(feature): | ||
# Given | ||
log = "some log data" | ||
|
||
environment = Environment(name="test") | ||
|
||
audit_log_record = AuditLog(log=log, environment=environment) | ||
|
||
def test_datadog_when_generate_event_data_with_with_missing_values_then_success(): | ||
# Given no log or email data | ||
log = None | ||
email = None | ||
env = "test" | ||
data_dog = DataDogWrapper(base_url="http://test.com", api_key="123key") | ||
|
||
# When | ||
event_data = data_dog.generate_event_data( | ||
log=log, email=email, environment_name=env | ||
) | ||
event_data = data_dog.generate_event_data(audit_log_record=audit_log_record) | ||
|
||
# Then | ||
expected_event_text = f"{log} by user {email}" | ||
expected_event_text = f"{log} by user system" | ||
assert event_data["text"] == expected_event_text | ||
assert len(event_data["tags"]) == 1 | ||
assert event_data["tags"][0] == f"env:{env}" | ||
assert event_data["tags"][0] == f"env:{environment.name}" | ||
|
||
|
||
def test_datadog_when_generate_event_data_with_with_missing_env_then_success(): | ||
def test_datadog_when_generate_event_data_with_missing_env_then_success( | ||
django_user_model, | ||
feature, | ||
): | ||
# Given environment | ||
log = "some log data" | ||
email = "[email protected]" | ||
env = None | ||
|
||
author = django_user_model(email="[email protected]") | ||
|
||
audit_log_record = AuditLog(log=log, author=author) | ||
|
||
data_dog = DataDogWrapper(base_url="http://test.com", api_key="123key") | ||
|
||
# When | ||
event_data = data_dog.generate_event_data( | ||
log=log, email=email, environment_name=env | ||
) | ||
event_data = data_dog.generate_event_data(audit_log_record=audit_log_record) | ||
|
||
# Then | ||
expected_event_text = f"{log} by user {email}" | ||
expected_event_text = f"{log} by user {author.email}" | ||
assert event_data["text"] == expected_event_text | ||
assert len(event_data["tags"]) == 1 | ||
assert event_data["tags"][0] == f"env:{env}" | ||
assert event_data["tags"][0] == "env:unknown" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,9 @@ | ||
import pytest | ||
from pytest_lazyfixture import lazy_fixture | ||
|
||
from audit.models import AuditLog | ||
from audit.related_object_type import RelatedObjectType | ||
from environments.models import Environment | ||
from integrations.dynatrace.dynatrace import EVENTS_API_URI, DynatraceWrapper | ||
|
||
|
||
|
@@ -17,46 +23,110 @@ def test_dynatrace_initialized_correctly(): | |
assert dynatrace.url == expected_url | ||
|
||
|
||
def test_dynatrace_when_generate_event_data_with_correct_values_then_success(): | ||
@pytest.mark.parametrize( | ||
"related_object_type, related_object, expected_deployment_name", | ||
( | ||
( | ||
RelatedObjectType.FEATURE.name, | ||
lazy_fixture("feature"), | ||
"Flagsmith Deployment - Flag Changed: Test Feature1", | ||
), | ||
( | ||
RelatedObjectType.FEATURE_STATE.name, | ||
lazy_fixture("feature_state"), | ||
"Flagsmith Deployment - Flag Changed: Test Feature1", | ||
), | ||
( | ||
RelatedObjectType.SEGMENT.name, | ||
lazy_fixture("segment"), | ||
"Flagsmith Deployment - Segment Changed: segment", | ||
), | ||
), | ||
) | ||
def test_dynatrace_when_generate_event_data_with_correct_values_then_success( | ||
django_user_model, related_object_type, related_object, expected_deployment_name | ||
): | ||
# Given | ||
log = "some log data" | ||
email = "[email protected]" | ||
env = "test" | ||
|
||
author = django_user_model(email="[email protected]") | ||
environment = Environment(name="test") | ||
|
||
audit_log_record = AuditLog( | ||
log=log, | ||
author=author, | ||
environment=environment, | ||
related_object_type=related_object_type, | ||
related_object_id=related_object.id, | ||
) | ||
|
||
dynatrace = DynatraceWrapper( | ||
base_url="http://test.com", | ||
api_key="123key", | ||
entity_selector="type(APPLICATION),entityName(docs)", | ||
) | ||
|
||
# When | ||
event_data = dynatrace.generate_event_data( | ||
log=log, email=email, environment_name=env | ||
) | ||
event_data = dynatrace.generate_event_data(audit_log_record=audit_log_record) | ||
|
||
# Then | ||
expected_event_text = f"{log} by user {email}" | ||
expected_event_text = f"{log} by user {author.email}" | ||
|
||
assert event_data["properties"]["event"] == expected_event_text | ||
assert event_data["properties"]["environment"] == env | ||
assert event_data["properties"]["environment"] == environment.name | ||
assert ( | ||
event_data["properties"]["dt.event.deployment.name"] == expected_deployment_name | ||
) | ||
|
||
|
||
def test_dynatrace_when_generate_event_data_with_with_missing_values_then_success(): | ||
# Given no log or email data | ||
log = None | ||
email = None | ||
env = "test" | ||
def test_dynatrace_when_generate_event_data_with_missing_author_then_success(): | ||
# Given | ||
log = "some log data" | ||
|
||
environment = Environment(name="test") | ||
|
||
audit_log_record = AuditLog(log=log, environment=environment) | ||
|
||
dynatrace = DynatraceWrapper( | ||
base_url="http://test.com", | ||
api_key="123key", | ||
entity_selector="type(APPLICATION),entityName(docs)", | ||
) | ||
|
||
# When | ||
event_data = dynatrace.generate_event_data( | ||
log=log, email=email, environment_name=env | ||
event_data = dynatrace.generate_event_data(audit_log_record=audit_log_record) | ||
|
||
# Then | ||
expected_event_text = f"{log} by user system" | ||
assert event_data["properties"]["event"] == expected_event_text | ||
assert event_data["properties"]["environment"] == environment.name | ||
|
||
|
||
def test_dynatrace_when_generate_event_data_with_missing_environment_then_success( | ||
django_user_model, feature | ||
): | ||
# Given | ||
log = "some log data" | ||
|
||
author = django_user_model(email="[email protected]") | ||
|
||
audit_log_record = AuditLog( | ||
log=log, | ||
author=author, | ||
related_object_type=RelatedObjectType.FEATURE.name, | ||
related_object_id=feature.id, | ||
) | ||
|
||
dynatrace = DynatraceWrapper( | ||
base_url="http://test.com", | ||
api_key="123key", | ||
entity_selector="type(APPLICATION),entityName(docs)", | ||
) | ||
|
||
# When | ||
event_data = dynatrace.generate_event_data(audit_log_record=audit_log_record) | ||
|
||
# Then | ||
expected_event_text = f"{log} by user {email}" | ||
expected_event_text = f"{log} by user {author.email}" | ||
assert event_data["properties"]["event"] == expected_event_text | ||
assert event_data["properties"]["environment"] == env | ||
assert event_data["properties"]["environment"] == "unknown" |
Oops, something went wrong.
f1dba53
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Successfully deployed to the following URLs:
flagsmith-frontend-preview – ./frontend
flagsmith-frontend-preview-git-main-flagsmith.vercel.app
flagsmith-frontend-production-native.vercel.app
flagsmith-frontend-preview-flagsmith.vercel.app
f1dba53
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Successfully deployed to the following URLs:
flagsmith-frontend-staging – ./frontend
flagsmith-frontend-staging-git-main-flagsmith.vercel.app
flagsmith-staging-frontend.vercel.app
flagsmith-frontend-staging-flagsmith.vercel.app
staging.flagsmith.com
f1dba53
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Successfully deployed to the following URLs:
docs – ./docs
docs-git-main-flagsmith.vercel.app
docs-flagsmith.vercel.app
docs.flagsmith.com
docs.bullet-train.io