diff --git a/server/app/model/resource-costs/resource-costs.js b/server/app/model/resource-costs/resource-costs.js index 9dacdbe80..bcf24bdd5 100644 --- a/server/app/model/resource-costs/resource-costs.js +++ b/server/app/model/resource-costs/resource-costs.js @@ -14,14 +14,17 @@ limitations under the License. */ -var mongoose = require('mongoose'); -var logger = require('_pr/logger')(module); -var Schema = mongoose.Schema; +var mongoose = require('mongoose') +require('mongoose-double')(mongoose) +var logger = require('_pr/logger')(module) + +var SchemaTypes = mongoose.Schema.Types +var Schema = mongoose.Schema // @TODO Date field types to be revised var ResourceCostsSchema = new Schema({ cost: { - type: Number, + type: SchemaTypes.Double, required: true }, currency: { @@ -67,7 +70,7 @@ var ResourceCostsSchema = new Schema({ required: false, trim: true }, - billLineRecordId: { + billLineItemId: { type: String, required: true, trim: true @@ -84,6 +87,11 @@ var ResourceCostsSchema = new Schema({ default: 'Other', trim: true }, + billRecordId: { + type: String, + required: false, + trim: true + }, serviceName: { type: String, required: true, @@ -123,7 +131,7 @@ var ResourceCostsSchema = new Schema({ } }) -ResourceCostsSchema.index({'organizationId': 1, 'resourceId': 1, 'billLineRecordId': 1, +ResourceCostsSchema.index({'organizationId': 1, 'billLineItemId': 1, 'startTime': 1, 'interval': 1}, {'unique': true}) ResourceCostsSchema.statics.saveResourceCost = function saveResourceCost(resourceCostData, callback) { @@ -140,8 +148,7 @@ ResourceCostsSchema.statics.saveResourceCost = function saveResourceCost(resourc ResourceCostsSchema.statics.upsertResourceCost = function upsertResourceCost(resourceCostData, callback) { var query = { organizationId: resourceCostData.organizationId, - resourceId: resourceCostData.resourceId, - billLineRecordId: resourceCostData.billLineRecordId, + billLineItemId: resourceCostData.billLineItemId, startTime: resourceCostData.startTime, interval: resourceCostData.interval } diff --git a/server/app/services/analyticsService.js b/server/app/services/analyticsService.js index 9c8770394..fe9651ac5 100644 --- a/server/app/services/analyticsService.js +++ b/server/app/services/analyticsService.js @@ -34,6 +34,7 @@ analyticsService.aggregateEntityCosts return appConfig.aws.services[key] }) + var offset = (new Date()).getTimezoneOffset()*60000 var startTime var interval switch (period) { @@ -49,8 +50,8 @@ analyticsService.aggregateEntityCosts async.forEach(catalystEntityHierarchy[parentEntity].children, function (childEntity, next0) { var query = parentEntityQuery - query.startTime = {$gte: Date.parse(startTime)} - query.endTime = {$lte: Date.parse(endTime)} + query.startTime = {$gte: Date.parse(startTime) + offset} + query.endTime = {$lte: Date.parse(endTime) + offset} async.waterfall([ function(next1) { diff --git a/server/app/services/resourceService.js b/server/app/services/resourceService.js index ec1892fa6..7c2e5851b 100644 --- a/server/app/services/resourceService.js +++ b/server/app/services/resourceService.js @@ -89,6 +89,7 @@ function updateAWSResourceCostsFromCSV(provider, resources, downlaodedCSVPath, u var awsBillIndexes = appConfig.aws.billIndexes var awsServices = appConfig.aws.services var awsZones = appConfig.aws.zones + var lineNumber = 0 var stream = fs.createReadStream(downlaodedCSVPath) csv.fromStream(stream, {headers: false}).on('data', function(data) { @@ -104,7 +105,8 @@ function updateAWSResourceCostsFromCSV(provider, resources, downlaodedCSVPath, u resourceCostEntry.lastUpdateTime = Date.parse(updateTime) resourceCostEntry.interval = 3600 resourceCostEntry.platformDetails.serviceName = data[awsBillIndexes.prod] - resourceCostEntry.billLineRecordId = data[awsBillIndexes.recordId] + resourceCostEntry.billLineItemId = ++lineNumber + resourceCostEntry.platformDetails.billRecordId = data[awsBillIndexes.recordId] if (data[awsBillIndexes.prod] in awsServices) { resourceCostEntry.platformDetails.serviceId = awsServices[data[awsBillIndexes.prod]] @@ -1132,5 +1134,4 @@ function updateDomainNameForInstance(domainName,publicIP,instanceId,awsSettings, callback(null,results); return; }) -} - +} \ No newline at end of file diff --git a/server/package.json b/server/package.json index 7f3c7f548..1a23f28dd 100644 --- a/server/package.json +++ b/server/package.json @@ -73,7 +73,8 @@ "events": "1.1.1", "moment": "2.14.1", "json2csv": "3.6.3", - "gridfs-stream":"1.1.1" + "gridfs-stream":"1.1.1", + "mongoose-double": "0.0.1" }, "devDependencies": { "grunt": "0.4.5",