From 3ccdbe4da307fa348ac4277dc00144c9f771bdcb Mon Sep 17 00:00:00 2001 From: HardiReady Date: Tue, 24 Oct 2017 20:21:06 +0200 Subject: [PATCH] Add log time save with decimal --- api/models/logs/budget.js | 2 +- api/models/logs/flag.js | 2 +- api/models/logs/kill.js | 2 +- api/models/logs/points.js | 2 +- api/models/logs/respawn.js | 2 +- api/models/logs/revive.js | 2 +- api/models/logs/transport.js | 2 +- api/tools/log-parse-tool.js | 20 +++++++--------- api/tools/util.js | 24 ++++++++++++++++++- .../war-detail/war-detail.component.ts | 3 +-- 10 files changed, 39 insertions(+), 22 deletions(-) diff --git a/api/models/logs/budget.js b/api/models/logs/budget.js index 46f93b1..7bcac48 100644 --- a/api/models/logs/budget.js +++ b/api/models/logs/budget.js @@ -10,7 +10,7 @@ const LogBudgetSchema = new Schema({ required: true }, time: { - type: Date, + type: Number, required: true }, fraction: { diff --git a/api/models/logs/flag.js b/api/models/logs/flag.js index 13a0eea..0243ac1 100644 --- a/api/models/logs/flag.js +++ b/api/models/logs/flag.js @@ -10,7 +10,7 @@ const LogFlagSchema = new Schema({ required: true }, time: { - type: Date, + type: Number, required: true }, player: { diff --git a/api/models/logs/kill.js b/api/models/logs/kill.js index b48761e..944c6cf 100644 --- a/api/models/logs/kill.js +++ b/api/models/logs/kill.js @@ -10,7 +10,7 @@ const LogKillSchema = new Schema({ required: true }, time: { - type: Date, + type: Number, required: true }, shooter: { diff --git a/api/models/logs/points.js b/api/models/logs/points.js index 28aa39b..39a82ef 100644 --- a/api/models/logs/points.js +++ b/api/models/logs/points.js @@ -10,7 +10,7 @@ const LogKillSchema = new Schema({ required: true }, time: { - type: Date, + type: Number, required: true }, ptBlufor: { diff --git a/api/models/logs/respawn.js b/api/models/logs/respawn.js index a79486a..c81d062 100644 --- a/api/models/logs/respawn.js +++ b/api/models/logs/respawn.js @@ -10,7 +10,7 @@ const LogRespawnSchema = new Schema({ required: true }, time: { - type: Date, + type: Number, required: true }, player: { diff --git a/api/models/logs/revive.js b/api/models/logs/revive.js index c5c9b10..9af4a82 100644 --- a/api/models/logs/revive.js +++ b/api/models/logs/revive.js @@ -10,7 +10,7 @@ const LogReviveSchema = new Schema({ required: true }, time: { - type: Date, + type: Number, required: true }, medic: { diff --git a/api/models/logs/transport.js b/api/models/logs/transport.js index 09accf0..92e75e0 100644 --- a/api/models/logs/transport.js +++ b/api/models/logs/transport.js @@ -10,7 +10,7 @@ const LogTransportSchema = new Schema({ required: true }, time: { - type: Date, + type: Number, required: true }, driver: { diff --git a/api/tools/log-parse-tool.js b/api/tools/log-parse-tool.js index b7dbbfc..ea29c00 100644 --- a/api/tools/log-parse-tool.js +++ b/api/tools/log-parse-tool.js @@ -1,5 +1,6 @@ 'use strict'; +const timeStringToDecimal = require('../tools/util').timeStringToDecimal; const arrayContains = require('./util').arrayContains; const parseWarLog = (lineArray, war) => { @@ -46,7 +47,7 @@ const parseWarLog = (lineArray, war) => { stats.kills.push({ war: war._id, - time: getDateTime(line.split(' ')[5]), + time: timeStringToDecimal(line.split(' ')[5]), shooter: shooter ? shooter.name : null, target: target.name, friendlyFire: shooter ? target.fraction === shooter.fraction : false, @@ -85,7 +86,7 @@ const parseWarLog = (lineArray, war) => { stats.flag.push({ war: war._id, - time: getDateTime(line.split(' ')[5]), + time: timeStringToDecimal(line.split(' ')[5]), player: playerName, flagFraction: flagFraction, capture: capture @@ -132,7 +133,7 @@ const parseWarLog = (lineArray, war) => { stats.revive.push({ war: war._id, - time: getDateTime(line.split(' ')[5]), + time: timeStringToDecimal(line.split(' ')[5]), stabilized: stabilized, medic: medic.name, patient: patient.name, @@ -155,7 +156,7 @@ const parseWarLog = (lineArray, war) => { stats.transport.push({ war: war._id, - time: getDateTime(line.split(' ')[5]), + time: timeStringToDecimal(line.split(' ')[5]), driver: driver.name, passenger: passenger ? passenger.name : null, fraction: driver.fraction, @@ -187,7 +188,7 @@ const parseWarLog = (lineArray, war) => { const getRespawnEntry = (respawn, playerName, warId) => { return { war: warId, - time: getDateTime(respawn[5]), + time: timeStringToDecimal(respawn[5]), player: playerName } }; @@ -195,7 +196,7 @@ const getRespawnEntry = (respawn, playerName, warId) => { const getPointsEntry = (pt, line, warId) => { return { war: warId, - time: getDateTime(pt[5]), + time: timeStringToDecimal(pt[5]), ptBlufor: parseInt(pt[12]), ptOpfor: parseInt(pt[15].slice(0, -1)), fraction: line.includes('no Domination') ? 'NONE' : line.includes('NATO +1') ? 'BLUFOR' : 'OPFOR' @@ -205,7 +206,7 @@ const getPointsEntry = (pt, line, warId) => { const getBudgetEntry = (budg, warId) => { return { war: warId, - time: getDateTime(budg[5]), + time: timeStringToDecimal(budg[5]), fraction: budg[9] === 'NATO' ? 'BLUFOR' : 'OPFOR', oldBudget: transformMoneyString(budg[11]), newBudget: transformMoneyString(budg[14]) @@ -231,9 +232,4 @@ const transformMoneyString = (budgetString) => { }; -const getDateTime = (timeString) => { - const timeZone = 'Z'; - return new Date('1999-01-01T0' + timeString + timeZone); -}; - module.exports = parseWarLog; diff --git a/api/tools/util.js b/api/tools/util.js index 8c2d93e..8be9195 100644 --- a/api/tools/util.js +++ b/api/tools/util.js @@ -14,7 +14,7 @@ const sortCollectionBy = (collection, key) => { const playerArrayContains = (arr, item) => { let i = 0, count = arr.length, matchFound = false; - for(; i < count; i++) { + for (; i < count; i++) { if (arr[i].name === item.name && arr[i].fraction === item.fraction) { matchFound = true; break; @@ -24,5 +24,27 @@ const playerArrayContains = (arr, item) => { return matchFound; }; +const timeStringToDecimal = (timeString) => { + const timeArray = timeString.split(':'); + const hour = parseInt(timeArray[0]); + const sek = parseInt(timeArray[1]) * 60 + parseInt(timeArray[2]); + + return hour + sek * (1 / 3600); +}; + + +const decimalToTimeString = (decimal) => { + const hours = parseInt(decimal.toString().split(".")[0]); + const minutesFloat = ((decimal % 1) * 3600) / 60; + const minutes = parseInt(minutesFloat.toString().split(".")[0]); + const seconds = Math.round((minutesFloat - parseInt(minutes)) * 60); + + return (hours < 10 ? '0' + hours : hours) + ':' + + (minutes < 10 ? '0' + minutes : minutes) + ':' + + (seconds < 10 ? '0' + seconds : seconds); +}; + exports.sortCollection = sortCollectionBy; exports.arrayContains = playerArrayContains; +exports.timeStringToDecimal = timeStringToDecimal; +exports.decimalToTimeString = decimalToTimeString; diff --git a/static/src/app/statistic/war-detail/war-detail.component.ts b/static/src/app/statistic/war-detail/war-detail.component.ts index b572e56..bd1df1d 100644 --- a/static/src/app/statistic/war-detail/war-detail.component.ts +++ b/static/src/app/statistic/war-detail/war-detail.component.ts @@ -33,8 +33,7 @@ export class WarDetailComponent { constructor(private route: ActivatedRoute, private router: Router, - private warService: WarService, - private logsService: LogsService) { + private warService: WarService) { Object.assign(this, this.playerChart) }