Skip to content

Commit

Permalink
New: [AEA-4488] - Adds NPPTS Slack Alerts (#869)
Browse files Browse the repository at this point in the history
## Summary

- ✨ New Feature

### Details

Adds NPPTS Slack Alerts
  • Loading branch information
JackSpagnoliNHS authored Oct 4, 2024
1 parent c7636ff commit ec8cd8f
Show file tree
Hide file tree
Showing 3 changed files with 187 additions and 5 deletions.
183 changes: 181 additions & 2 deletions SAMtemplates/alarms/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,19 @@ Description: |
Parameters:
StackName:
Type: String
Default: none

GetStatusUpdatesFunctionName:
Type: String
Default: none

UpdatePrescriptionStatusFunctionName:
Type: String

PrescriptionStatusUpdatesTableName:
Type: String

ConvertRequestToFhirFormatFunctionName:
Type: String

EnableAlerts:
Type: String

Expand Down Expand Up @@ -81,3 +88,175 @@ Resources:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn
OKActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn

PrescriptionStatusUpdateErrorsLogsMetricFilter:
Type: AWS::Logs::MetricFilter
Properties:
FilterName: PrescriptionStatusUpdateErrors
FilterPattern: !Sub '{ ($.function_name = "${UpdatePrescriptionStatusFunctionName}") && ($.response.statusCode = 500) }'
LogGroupName:
Fn::ImportValue: !Sub ${StackName}:functions:${UpdatePrescriptionStatusFunctionName}:LambdaLogGroupName
MetricTransformations:
- MetricNamespace: LambdaLogFilterMetrics
MetricName: ErrorCount
MetricValue: 1
Unit: Count
Dimensions:
- Key: FunctionName
Value: $.function_name

# Count of errors forced by INT tests
PrescriptionStatusUpdateForcedErrorsLogsMetricFilter:
Type: AWS::Logs::MetricFilter
Properties:
FilterName: PrescriptionStatusUpdateForcedErrors
FilterPattern: !Sub '{ ($.level = "INFO") && ($.function_name = "${UpdatePrescriptionStatusFunctionName}") && ($.message = %Forcing error for INT test prescription%) }'
LogGroupName:
Fn::ImportValue: !Sub ${StackName}:functions:${UpdatePrescriptionStatusFunctionName}:LambdaLogGroupName
MetricTransformations:
- MetricNamespace: LambdaLogFilterMetrics
MetricName: ForcedErrorCount
MetricValue: 1
Unit: Count
Dimensions:
- Key: FunctionName
Value: $.function_name

PrescriptionStatusUpdateErrorsAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: Count of PrescriptionStatusUpdate errors
AlarmName: !Sub ${StackName}_PrescriptionStatusUpdate_Errors
Metrics:
- Id: errors
Label: All 500 errors
ReturnData: false
MetricStat:
Metric:
MetricName: ErrorCount
Namespace: LambdaLogFilterMetrics
Dimensions:
- Name: FunctionName
Value: !Ref UpdatePrescriptionStatusFunctionName
Period: 60
Stat: Sum
Unit: Count
- Id: forcedErrors
Label: Forced 500 errors
ReturnData: false
MetricStat:
Metric:
MetricName: ForcedErrorCount
Namespace: LambdaLogFilterMetrics
Dimensions:
- Name: FunctionName
Value: !Ref UpdatePrescriptionStatusFunctionName
Period: 60
Stat: Sum
Unit: Count
- Id: trueErrors
Label: True 500 errors
Expression: errors - forcedErrors
ReturnData: true
EvaluationPeriods: 1
ComparisonOperator: GreaterThanOrEqualToThreshold
Threshold: 1
TreatMissingData: notBreaching
ActionsEnabled: !Ref EnableAlerts
AlarmActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn
InsufficientDataActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn
OKActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn

PrescriptionStatusUpdateUnhandledErrorsAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: Count of PrescriptionStatusUpdate unhandled errors
AlarmName: !Sub ${StackName}_PrescriptionStatusUpdate_UnhandledErrors
Namespace: Lambda
MetricName: Errors
Dimensions:
- Name: FunctionName
Value: !Ref UpdatePrescriptionStatusFunctionName
Period: 60 #seconds
EvaluationPeriods: 1
Statistic: Sum
ComparisonOperator: GreaterThanOrEqualToThreshold
Threshold: 1
Unit: Count
TreatMissingData: notBreaching
ActionsEnabled: !Ref EnableAlerts
AlarmActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn
InsufficientDataActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn
OKActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn

DynamoDBSystemErrorsAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: Count of DynamoDB system errors
AlarmName: !Sub ${StackName}_DynamoDB_SystemErrors
Namespace: DynamoDB
MetricName: SystemErrors
Dimensions:
- Name: TableName
Value: !Ref PrescriptionStatusUpdatesTableName
Period: 60 #seconds
EvaluationPeriods: 1
Statistic: Sum
ComparisonOperator: GreaterThanOrEqualToThreshold
Threshold: 1
Unit: Count
TreatMissingData: notBreaching
ActionsEnabled: !Ref EnableAlerts
AlarmActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn
InsufficientDataActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn
OKActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn

CPSUFhirConverterErrorLogsMetricFilter:
Type: AWS::Logs::MetricFilter
Properties:
FilterName: CPSUFhirConverterErrors
FilterPattern: !Sub '{ ($.function_name = "${ConvertRequestToFhirFormatFunctionName}") && ($.response.statusCode = 500) }'
LogGroupName:
Fn::ImportValue: !Sub ${StackName}:functions:${ConvertRequestToFhirFormatFunctionName}:LambdaLogGroupName
MetricTransformations:
- MetricNamespace: LambdaLogFilterMetrics
MetricName: ErrorCount
MetricValue: 1
Unit: Count
Dimensions:
- Key: FunctionName
Value: $.function_name

CPSUFhirConverterErrorsAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: Count of CPSU FHIR Converter errors
AlarmName: !Sub ${StackName}_CpsuFhirConverter_Errors
Namespace: Lambda
MetricName: Errors
Dimensions:
- Name: FunctionName
Value: !Ref ConvertRequestToFhirFormatFunctionName
Period: 60 #seconds
EvaluationPeriods: 1
Statistic: Sum
ComparisonOperator: GreaterThanOrEqualToThreshold
Threshold: 1
Unit: Count
TreatMissingData: notBreaching
ActionsEnabled: !Ref EnableAlerts
AlarmActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn
InsufficientDataActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn
OKActions:
- !ImportValue lambda-resources:SlackAlertsSnsTopicArn
3 changes: 3 additions & 0 deletions SAMtemplates/main_template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -147,4 +147,7 @@ Resources:
Parameters:
StackName: !Ref AWS::StackName
GetStatusUpdatesFunctionName: !GetAtt Functions.Outputs.GetStatusUpdatesFunctionName
UpdatePrescriptionStatusFunctionName: !GetAtt Functions.Outputs.UpdatePrescriptionStatusFunctionName
PrescriptionStatusUpdatesTableName: !GetAtt Tables.Outputs.PrescriptionStatusUpdatesTableName
ConvertRequestToFhirFormatFunctionName: !GetAtt Functions.Outputs.ConvertRequestToFhirFormatFunctionName
EnableAlerts: !Ref EnableAlerts
6 changes: 3 additions & 3 deletions SAMtemplates/state_machines/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Parameters:
EnableSplunk:
Type: String

FihrValidatorStackName:
FhirValidatorStackName:
Type: String
Default: fhir-validator

Expand All @@ -45,7 +45,7 @@ Resources:
DefinitionSubstitutions:
FhirValidationFunctionArn: !Join
- ":"
- - Fn::ImportValue: !Sub ${FihrValidatorStackName}:FHIRValidatorUKCoreLambdaArn
- - Fn::ImportValue: !Sub ${FhirValidatorStackName}:FHIRValidatorUKCoreLambdaArn
- snap
UpdatePrescriptionStatusFunctionArn: !Sub ${UpdatePrescriptionStatusFunctionArn}:$LATEST
Logging:
Expand All @@ -68,7 +68,7 @@ Resources:
AdditionalPolicies: !Join
- ","
- - Fn::ImportValue: !Sub ${StackName}:functions:${UpdatePrescriptionStatusFunctionName}:ExecuteLambdaPolicyArn
- Fn::ImportValue: !Sub ${FihrValidatorStackName}:FHIRValidatorUKCoreExecuteLambdaPolicyArn
- Fn::ImportValue: !Sub ${FhirValidatorStackName}:FHIRValidatorUKCoreExecuteLambdaPolicyArn
LogRetentionInDays: !Ref LogRetentionInDays
CloudWatchKMSKeyId: !ImportValue account-resources:CloudwatchLogsKmsKeyArn
EnableSplunk: !Ref EnableSplunk
Expand Down

0 comments on commit ec8cd8f

Please sign in to comment.