Skip to content
This repository was archived by the owner on Dec 9, 2024. It is now read-only.

Commit 5d0d272

Browse files
committed
Updated to version v1.8.4
1 parent a464d81 commit 5d0d272

33 files changed

+10560
-9403
lines changed

CHANGELOG.md

+27
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,23 @@
11
# Change Log
2+
23
All notable changes to this project will be documented in this file.
34

45
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
56
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [1.8.4] - 2023-07-31
9+
10+
### Changed
11+
12+
- Refactored code to reduce complexity
13+
- Upgraded requests to mitigate CVE-2023-32681
14+
- Upgraded semver to mitigate CVE-2022-25883
15+
- Upgraded cryptography
16+
617
## [1.8.3] - 2023-04-18
18+
719
### Changed
20+
821
- Fixed S3 logging bucket setting
922
- Fixed missing userName in codecommit event when pushes are made by assumed role credentials
1023
- Upgraded Werkzeug to mitigate CVE-2023-25577
@@ -14,30 +27,44 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1427
- Upgraded Athena engine version 3
1528

1629
## [1.8.2] - 2023-01-13
30+
1731
### Security
32+
1833
- Upgrade JSON5 to mitigate CVE-2022-46175
1934
- Upgrade certifi to mitigate CVE-2022-23491
2035

2136
## [1.8.1] - 2022-12-05
37+
2238
### Added
39+
2340
- Added Application Registry
41+
2442
### Changed
43+
2544
- Upgraded node 14 to 16
2645

2746
## [1.8.0] - 2022-10-31
47+
2848
### Added
49+
2950
- Added multi-account multi-region data ingestion
3051
- Added tag filter for AWS CodeCommit, CodeBuild and CodePipeline
3152

3253
## [1.5.0] - 2022-04-19
54+
3355
### Added
56+
3457
- Added GitHub integration - GitHub activity metric for push events
3558
- Added Mean Time to Recovery (MTTR) metric for Code Pipeline
3659

3760
## [1.1.0] - 2021-06-16
61+
3862
### Added
63+
3964
- Metrics visualization for codebuild and codepipeline Events.
4065

4166
## [1.0.0] - 2021-03-22
67+
4268
### Added
69+
4370
- Initial version

CONTRIBUTING.md

-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ If you discover a potential security issue in this project we ask that you notif
5656

5757

5858
## Licensing
59-
6059
See the [LICENSE](https://github.com/aws-solutions/aws-devops-monitoring-dashboard/blob/main/LICENSE.txt) file for our project's licensing. We will ask you to confirm the licensing of your contribution.
6160

6261
We may ask you to sign a [Contributor License Agreement (CLA)](http://en.wikipedia.org/wiki/Contributor_License_Agreement) for larger changes.

NOTICE.txt

+22-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
1+
DevOps Monitoring Dashboard on AWS
2+
13
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2-
SPDX-License-Identifier: Apache-2.0
4+
Licensed under the Apache License Version 2.0 (the "License"). You may not use this file except
5+
in compliance with the License. A copy of the License is located at http://www.apache.org/licenses/
6+
or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS,
7+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied. See the License for the
8+
specific language governing permissions and limitations under the License.
39

410
**********************
511
THIRD PARTY COMPONENTS
@@ -73,3 +79,18 @@ tomli under the Massachusetts Institute of Technology (MIT) license
7379
types-toml under the Apache License Version 2.0
7480
Werkzeug under the BSD 3-Clause "New" or "Revised" License
7581
xmltodict under the Massachusetts Institute of Technology (MIT) license
82+
awscli under the Apache License Version 2.0
83+
colorama under the BSD 3-Clause "New" or "Revised" License
84+
docutils under the Massachusetts Institute of Technology (MIT) license
85+
pyasn1 under the BSD License (BSD-2-Clause)
86+
rsa under the Apache License Version 2.0
87+
@aws-cdk/aws-glue-alpha under the Apache License Version 2.0
88+
@aws-cdk/aws-synthetics-alpha under the Apache License Version 2.0
89+
@aws-solutions-constructs/aws-eventbridge-kinesisfirehose-s3 under the Apache License Version 2.0
90+
@aws-solutions-constructs/aws-eventbridge-lambda under the Apache License Version 2.0
91+
@aws-solutions-constructs/aws-kinesisfirehose-s3 under the Apache License Version 2.0
92+
@aws-solutions-constructs/core under the Apache License Version 2.0
93+
@aws-cdk/aws-synthetics-alpha under the Apache License Version 2.0
94+
aws-cdk-lib under the Apache License Version 2.0
95+
constructs under the Apache License Version 2.0
96+

deployment/cdk-solution-helper/npm-shrinkwrap.json

+2-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
+7-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
{
22
"name": "cdk-solution-helper",
3-
"version": "0.1.0"
3+
"version": "0.1.0",
4+
"description": "CDK solution helper to build zip files for lambda functions",
5+
"author": {
6+
"name": "Amazon Web Services",
7+
"url": "https://aws.amazon.com/solutions"
8+
},
9+
"license": "Apache-2.0"
410
}

source/lambda/event_parser/codecommit_events.js

+123-60
Original file line numberDiff line numberDiff line change
@@ -9,80 +9,32 @@ const LOGGER = new (require('./lib/logger'))();
99
* Transform AWS CloudWatch events from AWS CodeCommit
1010
*/
1111

12-
let TransformCodeCommitEvents = (data, recordNumber) => {
12+
let transformCodeCommitEvents = (data, recordNumber) => {
1313
LOGGER.log('INFO', 'Start transforming CodeCommit CW Event ' + recordNumber.toString());
1414

1515
let detailData = {};
1616
let requestParametersData = {};
17-
let responseElementsData = {};
1817
let transformedRecord = {};
1918
let transformedDetail = {};
2019

2120
//Process event data
2221
for (let key in data) {
2322
//Keep all key values that are not under detail tag as they are common in all cloudwatch events
2423
if (key !== 'detail') {
25-
if (!transformedRecord.hasOwnProperty(key)) {
26-
if (key !== 'detail-type') transformedRecord[key] = data[key];
27-
//rename key detail-type to detail_type to support athena query
28-
else transformedRecord['detail_type'] = data[key];
29-
}
24+
transformedRecord = getCWEventCommonData(key, data, transformedRecord);
3025
}
3126
//process key values under detail tag that are specific only for this event
3227
else {
3328
detailData = data['detail'];
34-
if (detailData.hasOwnProperty('eventName')) transformedDetail['eventName'] = detailData['eventName'];
35-
36-
//process commits made from command line git commands
37-
if (detailData.hasOwnProperty('userIdentity') && detailData['userIdentity'] != null) {
38-
let userIdentity = detailData['userIdentity'];
39-
if (userIdentity['userName'] != null) transformedDetail['authorName'] = userIdentity['userName'];
40-
//Fix missing userName in codecommit event when pushes are made by assumed role credentials
41-
else if (userIdentity['sessionContext']['sessionIssuer']['userName'] != null)
42-
transformedDetail['authorName'] = userIdentity['sessionContext']['sessionIssuer']['userName'];
43-
else if (userIdentity['principalId'] != null)
44-
transformedDetail['authorName'] = userIdentity['principalId'].split(':')[1];
45-
}
46-
47-
//process commits made from aws codecommit console
48-
if (detailData.hasOwnProperty('requestParameters') && detailData['requestParameters'] != null) {
49-
requestParametersData = detailData['requestParameters'];
50-
if (requestParametersData.hasOwnProperty('repositoryName'))
51-
transformedDetail['repositoryName'] = requestParametersData['repositoryName'];
52-
if (requestParametersData.hasOwnProperty('branchName'))
53-
transformedDetail['branchName'] = requestParametersData['branchName'];
54-
if (requestParametersData.hasOwnProperty('name'))
55-
transformedDetail['authorName'] = requestParametersData['name'];
56-
if (requestParametersData.hasOwnProperty('commitId'))
57-
transformedDetail['commitId'] = requestParametersData['commitId'];
58-
}
59-
// If requestParameters is not found in source data, stop further processing but return empty json object to drop this record
60-
else {
61-
return {};
62-
}
63-
64-
//process commits made from aws codecommit console
65-
if (detailData.hasOwnProperty('responseElements') && detailData['responseElements'] != null) {
66-
responseElementsData = detailData['responseElements'];
67-
if (!transformedDetail.hasOwnProperty('commitId') && responseElementsData.hasOwnProperty('commitId'))
68-
transformedDetail['commitId'] = responseElementsData['commitId'];
69-
}
70-
71-
//process commits made from command line git commands
72-
if (Object.keys(requestParametersData).length > 0 && requestParametersData.hasOwnProperty('references')) {
73-
let references = requestParametersData['references'][0];
74-
if (references.hasOwnProperty('commit') && !transformedDetail.hasOwnProperty('commitId'))
75-
transformedDetail['commitId'] = references['commit'];
76-
if (references.hasOwnProperty('ref') && !transformedDetail.hasOwnProperty('branchName'))
77-
transformedDetail['branchName'] = references['ref'].split('/').pop();
78-
}
79-
80-
//process commits made from command line git commands
81-
if (detailData.hasOwnProperty('additionalEventData')) {
82-
let additionalEventData = detailData['additionalEventData'];
83-
if (additionalEventData.hasOwnProperty('repositoryName') && !transformedDetail.hasOwnProperty('repositoryName'))
84-
transformedDetail['repositoryName'] = additionalEventData['repositoryName'];
85-
}
29+
transformedDetail = getEventName(detailData, transformedDetail);
30+
transformedDetail = getCommandLineGitCommitData(detailData, transformedDetail);
31+
const consoleGitCommitData = getCodeCommitConsoleGitCommitData(detailData, transformedDetail, requestParametersData);
32+
// If empty json object is found, stop further processing but return empty json object to drop this record
33+
if (Object.keys(consoleGitCommitData[0]).length === 0) return {};
34+
requestParametersData = consoleGitCommitData[0];
35+
transformedDetail = consoleGitCommitData[1];
36+
transformedDetail = getCodeCommitConsoleCommitID(detailData, transformedDetail);
37+
transformedDetail = getCommandLineGitCommitAdditionalData(detailData, transformedDetail, requestParametersData);
8638

8739
// if no commit Id (possibly due to codecommit error or other reasons), return empty json object to drop this record
8840
if (!transformedDetail.hasOwnProperty('commitId')) {
@@ -99,6 +51,117 @@ let TransformCodeCommitEvents = (data, recordNumber) => {
9951
return transformedRecord;
10052
};
10153

54+
/**
55+
* Keep all key values that are not under detail tag as they are common in all cloudwatch events
56+
* @param {string} key - key in the CodeCommit CloudWatch raw event
57+
* @param {json} data - CodeCommit CloudWatch raw event
58+
* @param {json} transformedRecord - Transformed CodeCommit record
59+
*/
60+
const getCWEventCommonData = (key, data, transformedRecord) => {
61+
if (!transformedRecord.hasOwnProperty(key)) {
62+
if (key !== 'detail-type') transformedRecord[key] = data[key];
63+
//rename key detail-type to detail_type to support athena query
64+
else transformedRecord['detail_type'] = data[key];
65+
}
66+
67+
return transformedRecord;
68+
};
69+
70+
/**
71+
* Get eventName from CodeCommit CloudWatch raw event data under detail key
72+
* @param {json} detailData - CodeCommit CloudWatch raw event data under detail key
73+
* @param {json} transformedDetail - Transformed CodeCommit record under detail key
74+
*/
75+
const getEventName = (detailData, transformedDetail) => {
76+
if (detailData.hasOwnProperty('eventName')) transformedDetail['eventName'] = detailData['eventName'];
77+
78+
return transformedDetail;
79+
};
80+
81+
/**
82+
* Process commits made from command line git commands
83+
* @param {json} detailData - CodeCommit CloudWatch raw event data under detail key
84+
* @param {json} transformedDetail - Transformed CodeCommit record under detail key
85+
*/
86+
const getCommandLineGitCommitData = (detailData, transformedDetail) => {
87+
if (!detailData['userIdentity']) return transformedDetail;
88+
89+
let userIdentity = detailData['userIdentity'];
90+
if (userIdentity['userName'] != null) transformedDetail['authorName'] = userIdentity['userName'];
91+
//Fix missing userName in codecommit event when pushes are made by assumed role credentials
92+
else if (userIdentity['sessionContext']['sessionIssuer']['userName'] != null)
93+
transformedDetail['authorName'] = userIdentity['sessionContext']['sessionIssuer']['userName'];
94+
else if (userIdentity['principalId'] != null)
95+
transformedDetail['authorName'] = userIdentity['principalId'].split(':')[1];
96+
97+
return transformedDetail;
98+
};
99+
100+
/**
101+
* Process commits made from AWS CodeCommit console
102+
* @param {json} detailData - CodeCommit CloudWatch raw event data under detail key
103+
* @param {json} transformedDetail - Transformed CodeCommit record under detail key
104+
* @param {json} requestParametersData - data under requestParameters key
105+
*/
106+
const getCodeCommitConsoleGitCommitData = (detailData, transformedDetail, requestParametersData) => {
107+
if (detailData.hasOwnProperty('requestParameters') && detailData['requestParameters'] != null) {
108+
requestParametersData = detailData['requestParameters'];
109+
if (requestParametersData.hasOwnProperty('repositoryName'))
110+
transformedDetail['repositoryName'] = requestParametersData['repositoryName'];
111+
if (requestParametersData.hasOwnProperty('branchName'))
112+
transformedDetail['branchName'] = requestParametersData['branchName'];
113+
if (requestParametersData.hasOwnProperty('name'))
114+
transformedDetail['authorName'] = requestParametersData['name'];
115+
if (requestParametersData.hasOwnProperty('commitId'))
116+
transformedDetail['commitId'] = requestParametersData['commitId'];
117+
return [requestParametersData, transformedDetail]
118+
}
119+
// If requestParameters is not found in source data, return empty json object to drop this record
120+
else {
121+
return [{},{}];
122+
}
123+
}
124+
125+
126+
/**
127+
* Get commit id for git commit made from AWS CodeCommit console
128+
* @param {json} detailData - CodeCommit CloudWatch raw event data under detail key
129+
* @param {json} transformedDetail - Transformed CodeCommit record under detail key
130+
* @param {json} requestParametersData - data under requestParameters key
131+
*/
132+
const getCodeCommitConsoleCommitID = (detailData, transformedDetail) => {
133+
//process commits made from aws codecommit console
134+
let responseElementsData = {}
135+
if (detailData.hasOwnProperty('responseElements') && detailData['responseElements'] != null) {
136+
responseElementsData = detailData['responseElements'];
137+
if (!transformedDetail.hasOwnProperty('commitId') && responseElementsData.hasOwnProperty('commitId'))
138+
transformedDetail['commitId'] = responseElementsData['commitId'];
139+
}
140+
return transformedDetail;
141+
};
142+
143+
/**
144+
* Extract additional data from commits made from command line git commands
145+
* @param {json} detailData - CodeCommit CloudWatch raw event data under detail key
146+
* @param {json} transformedDetail - Transformed CodeCommit record under detail key
147+
* @param {json} requestParametersData - data under requestParameters key
148+
*/
149+
const getCommandLineGitCommitAdditionalData = (detailData, transformedDetail, requestParametersData) => {
150+
if (Object.keys(requestParametersData).length > 0 && requestParametersData.hasOwnProperty('references')) {
151+
let references = requestParametersData['references'][0];
152+
if (references.hasOwnProperty('commit') && !transformedDetail.hasOwnProperty('commitId'))
153+
transformedDetail['commitId'] = references['commit'];
154+
if (references.hasOwnProperty('ref') && !transformedDetail.hasOwnProperty('branchName'))
155+
transformedDetail['branchName'] = references['ref'].split('/').pop();
156+
}
157+
if (detailData.hasOwnProperty('additionalEventData')) {
158+
let additionalEventData = detailData['additionalEventData'];
159+
if (additionalEventData.hasOwnProperty('repositoryName') && !transformedDetail.hasOwnProperty('repositoryName'))
160+
transformedDetail['repositoryName'] = additionalEventData['repositoryName'];
161+
}
162+
return transformedDetail;
163+
};
164+
102165
module.exports = {
103-
transformCodeCommitEvents: TransformCodeCommitEvents
166+
transformCodeCommitEvents: transformCodeCommitEvents
104167
};

0 commit comments

Comments
 (0)