Skip to content

Commit 9125345

Browse files
authored
GA plugin updated to support GA4 analytics report (#252)
* [GA4][s]: GA plugin updated to support GA4 analytics report * [fix][xs]: use latest googleapis package * [fix][xs]: init env for test * [test][xs]: remove test for node v10.x * [test][s]: test fix
1 parent b4566dd commit 9125345

File tree

6 files changed

+130
-109
lines changed

6 files changed

+130
-109
lines changed

.github/workflows/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99

1010
strategy:
1111
matrix:
12-
node-version: [10.x, 12.x, 14.x, 16.x]
12+
node-version: [12.x, 14.x, 16.x]
1313

1414
steps:
1515
- uses: actions/checkout@v2

fixtures/index.js

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,20 +1100,19 @@ nock('http:/127.0.0.1:5000', {"encodedQueryParams":true})
11001100
.query({"page_type": "page"})
11011101
.reply(200, [{"user_id":"c75d7c1a-3966-44aa-818a-0a5101f3c128","name":"page-one","title":"Page One Title","content":"Page One Content","publish_date":"2019-11-27T00:00:00","page_type":"page","group_id":null},{"user_id":"5e48834c-c835-4f7a-9d1e-f94e6810a721","name":"page-two","title":"Page Two Title","content":"Page Two Content","publish_date":null,"page_type":"page","group_id":null},{"user_id":"5e48834c-c835-4f7a-9d1e-f94e6810a721","name":"page-three","title":"Page Three Title","content":"Page Three Content","publish_date":null,"page_type":"page","group_id":null},{"user_id":"17a6aee1-f442-4928-aad9-a091f87829f9","name":"page-four","title":"Page Four Title","content":"Page Four Content","publish_date":null,"page_type":"page","group_id":null}])
11021102
}
1103-
11041103
// Mock for google api
1105-
nock('https://www.googleapis.com:443', {"encodedQueryParams":true})
1104+
nock('https://analytics.googleapis.com', {"encodedQueryParams":true})
11061105
.get('/analytics/v3/data/ga')
11071106
.query({
1108-
dimensions: 'ga:pagePathLevel2',
1109-
'end-date': 'today',
1110-
filters: 'ga:pagePathLevel1==/dataset/',
1111-
ids: 'ga:undefined',
1112-
key: 'some test string',
1113-
'max-results': 30,
1114-
metrics: 'ga:uniquePageviews',
1115-
sort: '-ga:uniquePageviews',
11161107
'start-date': '30daysAgo',
1108+
'end-date': 'today',
1109+
'sort': '-ga:uniquePageviews',
1110+
'dimensions': 'ga:pagePathLevel2',
1111+
'metrics': 'ga:uniquePageviews',
1112+
'max-results': '30',
1113+
'filters': 'ga:pagePathLevel1==/dataset/',
1114+
'ids': 'ga:123456789',
1115+
'key': 'some test string'
11171116
})
11181117
.reply(200, ["1f","8b","08","00","00","00","00","00","02ffe5564d6fe33610bde757185ed46881d55a1f962507308aa071b70676dd20c9a287a2075a1a2b4428524b52718c20ffbda32f8bf68a6ddaeb02be6866deccf071e6d12f17a3d1f891f2747c391a134ed841d344bdcbc835d164fcbef2d2daf7a075a12ea7d3fd7eff21132263400aaa3e24229f1e61d3a7609a226e9a919f69aa9619b9f4423ff002d79d4d529a035754f0da5e900c6e887ef8044fc0fc490e5a6282ca5372fab5445f064f14f66aa284d44b67c0b1a34c83fc369bf743708dbfba13057a3a519a48ede0272c0337250775958909f0b4316981a6494e9e1d09aa645a61507370ac260f78f617fcc0cf3e4dc5c731531d8bee2e61e5ac73760e64a2b2996474ae9e9336e294962eac650763feac0da33af68c8f71edfaab8554ac99f103049e025a3687faf096cb23995d4b0d193837f08c10af6bb46711ad818bd6d7668634e4ea066455bcf6d4562d3461b7c778cf5dd466056cf789f2c7ef74ec383cebefe4f8c6142d036f908d420a2c096bbe13fd2a76c65a99bed92a9224a2e4baf5ba911bfa5e1077de3d6c6fa42840ea4313f1e5ca89627fe18791ef04c7a5e5784a64f88ff3686f16cde279e8875d64dbcb86e4f5eaaf38c88c362cc8279ac0e8c75bb2ffa98bd664dbf57d2208c74d4904d784727547f282415acbf0e568479882d6cfca9cff06246db6b5d9f0976ecf79db864d4b8e19ee0f451d78bdfebcdadcad7fdff40155f39dfbeefe76bdf9d848c5eb7b6bad7369b114fbbcc274bf0c575a6fee571f57b76da98b56991a8d50bf0a79c50ca968e760a07225cdb370d1132ac5bee7e9a88753609054d34ff5614b18e1094cfbbebc6871a28e3d2c9738b3badaa78ca8af2561883f01861620702d0ff04cf5302ef46c38a60aa10bec149409f0632be0fc6006cab3b6d7a370a0711fc39c720984691410b3ae6b6326113ee4f4a44737b2c4ee12897b8efb012a","7df40c486c43b4d98d48df76433b694beebe81e33edc3a030657aa2c0a467113512132896b8f941915e7ff8b6e036f3b64179a13f9d8bfcaff84f897a6fb0ca1edd88bc4f34990a64ee441eccc8260eb6ca3189cc8777d2f0ee27411474627a16d40b5245ce15d56af12a3fc64ac43dbfd9fdeaa6f426c1cb72383fc6666b88da08414a4be0f90398a4a428bf3259dd99a2373f081443387b80971660b58385b0863c74347127bf35d3c5f9879ec1d7355e645252fc3f364459e2c94c9ce2cf86fc7359056a206bb7c0310956fc7c4deeccea67ad5c3f0506eeb95645499131ed8e613d3e3ffa242285ab566226c933824e66f8011abc204f316523d5f17af177f035bc6e5895e0d0000"], [
11191118
'ETag',

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
"express-jwt": "^6.0.0",
5858
"express-session": "^1.16.1",
5959
"express-validator": "^6.9.2",
60-
"googleapis": "^47.0.0",
60+
"googleapis": "^116.0.0",
6161
"i18n": "^0.8.3",
6262
"jsdom": "^16.4.0",
6363
"jwks-rsa": "^1.8.0",

plugins/google-analytics/api.js

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const {google} = require('googleapis')
1+
const { google } = require('googleapis')
22

33
class GaApi {
44

@@ -12,14 +12,23 @@ class GaApi {
1212

1313
async get(params) {
1414

15-
const defaultParams = {
16-
'auth': this.jwt,
17-
'ids': 'ga:' + process.env.GA_VIEW_ID,
15+
if (process.env.GA_ID.startsWith('UA')) {
16+
params['ids'] = 'ga:' + process.env.GA_VIEW_ID
17+
const analyticsdata = google.analytics({
18+
version: 'v3',
19+
auth: this.jwt
20+
})
21+
return await analyticsdata.data.ga.get(params)
22+
}
23+
else {
24+
params['property'] = `properties/${process.env.GA4_PROPERTY_ID}`
25+
const analyticsdata = google.analyticsdata({
26+
version: 'v1beta',
27+
auth: this.jwt
28+
});
29+
30+
return await analyticsdata.properties.runReport(params)
1831
}
19-
20-
const endParams = {...defaultParams, ...params}
21-
22-
return await google.analytics('v3').data.ga.get(endParams)
2332
}
2433
}
2534

tests/plugins/google-analytics.test.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ const mocks = require('../../fixtures')
55

66
mocks.initMocks()
77

8+
process.env.GA_ID = 'UA-12345678-9'
9+
process.env.GA_VIEW_ID = '123456789'
10+
811
let gaApi = new GaApi()
912
gaApi.jwt = "some test string"
1013

@@ -22,9 +25,7 @@ test('ga api get works', async t => {
2225
}
2326

2427
const result = await gaApi.get(params)
25-
26-
console.log(result)
27-
28+
2829
t.is(result.status, 200)
2930
t.is(result.data.totalResults, 109)
3031
})

0 commit comments

Comments
 (0)