send licences graph request to v1 for data instead of analytics

This commit is contained in:
hugh-obrien 2018-08-22 18:31:29 +01:00
parent eeadd1e9bb
commit 8d72fc78fc
5 changed files with 60 additions and 1 deletions

View file

@ -1,6 +1,7 @@
AnalyticsManager = require "./AnalyticsManager"
Errors = require "../Errors/Errors"
AuthenticationController = require("../Authentication/AuthenticationController")
InstitutionsAPI = require("../Institutions/InstitutionsAPI")
GeoIpLookup = require '../../infrastructure/GeoIpLookup'
module.exports = AnalyticsController =
@ -23,6 +24,15 @@ module.exports = AnalyticsController =
AnalyticsManager.recordEvent user_id, req.params.event, req.body, (error) ->
respondWith(error, res, next)
licences: (req, res, next) ->
AuthenticationController.getLoggedInUserId(req) or req.sessionID
{resource_id, start_date, end_date, lag} = req.query
InstitutionsAPI.getInstitutionLicences resource_id, start_date, end_date, lag, (error, licences) ->
if error?
res.send 503
else
res.send licences
respondWith = (error, res, next) ->
if error instanceof Errors.ServiceNotConfiguredError
# ignore, no-op

View file

@ -9,6 +9,8 @@ module.exports =
webRouter.put '/editingSession/:projectId',
AnalyticsController.updateEditingSession
webRouter.get '/graphs/licences', AnalyticsController.licences
publicApiRouter.use '/analytics/graphs',
AuthenticationController.httpAuth,
AnalyticsProxy.call('/graphs')
@ -23,4 +25,4 @@ module.exports =
publicApiRouter.use '/analytics/uniExternalCollaboration',
AuthenticationController.httpAuth,
AnalyticsProxy.call('/uniExternalCollaboration')
AnalyticsProxy.call('/uniExternalCollaboration')

View file

@ -11,6 +11,13 @@ module.exports = InstitutionsAPI =
defaultErrorMessage: "Couldn't get institution affiliations"
}, callback
getInstitutionLicences: (institutionId, startDate, endDate, lag, callback = (error, body) ->) ->
makeAffiliationRequest {
method: 'GET'
path: "/api/v2/institutions/#{institutionId.toString()}/institution_licences"
body: {start_date: startDate, end_date: endDate, lag}
defaultErrorMessage: "Couldn't get institution affiliations"
}, callback
getUserAffiliations: (userId, callback = (error, body) ->) ->
makeAffiliationRequest {

View file

@ -17,9 +17,13 @@ describe 'AnalyticsController', ->
updateEditingSession: sinon.stub().callsArgWith(3)
recordEvent: sinon.stub().callsArgWith(3)
@InstitutionsAPI =
getInstitutionLicences: sinon.stub().callsArgWith(4)
@controller = SandboxedModule.require modulePath, requires:
"./AnalyticsManager":@AnalyticsManager
"../Authentication/AuthenticationController":@AuthenticationController
"../Institutions/InstitutionsAPI":@InstitutionsAPI
"logger-sharelatex":
log:->
'../../infrastructure/GeoIpLookup': @GeoIpLookup =
@ -66,3 +70,19 @@ describe 'AnalyticsController', ->
@controller.recordEvent @req, @res
@AnalyticsManager.recordEvent.calledWith(@req.sessionID, @req.params["event"], @req.body).should.equal true
done()
describe "licences", ->
beforeEach ->
@req =
query:
resource_id:1
start_date:'1514764800'
end_date:'1530662400'
resource_type:'institution'
sessionID: "sessionIDHere"
session: {}
it "should trigger institutions api to fetch licences graph data", (done)->
@controller.licences @req, @res
@InstitutionsAPI.getInstitutionLicences.calledWith(@req.query["resource_id"], @req.query["start_date"], @req.query["end_date"], @req.query["lag"]).should.equal true
done()

View file

@ -41,6 +41,26 @@ describe "InstitutionsAPI", ->
body.should.equal responseBody
done()
describe 'getInstitutionLicences', ->
it 'get licences', (done)->
@institutionId = 123
responseBody = {"lag":"monthly","data":[{"key":"users","values":[{"x":"2018-01-01","y":1}]}]}
@request.yields(null, { statusCode: 200 }, responseBody)
startDate = '1417392000'
endDate = '1420848000'
@InstitutionsAPI.getInstitutionLicences @institutionId, startDate, endDate, 'monthly', (err, body) =>
should.not.exist(err)
@request.calledOnce.should.equal true
requestOptions = @request.lastCall.args[0]
expectedUrl = "v1.url/api/v2/institutions/#{@institutionId}/institution_licences"
requestOptions.url.should.equal expectedUrl
requestOptions.method.should.equal 'GET'
requestOptions.body['start_date'].should.equal startDate
requestOptions.body['end_date'].should.equal endDate
requestOptions.body.lag.should.equal 'monthly'
body.should.equal responseBody
done()
describe 'getUserAffiliations', ->
it 'get affiliations', (done)->
responseBody = [{ foo: 'bar' }]