diff --git a/lib/new-admin/graphql/resolvers/log.resolver.js b/lib/new-admin/graphql/resolvers/log.resolver.js
index 6b439dc2..b8a90ecc 100644
--- a/lib/new-admin/graphql/resolvers/log.resolver.js
+++ b/lib/new-admin/graphql/resolvers/log.resolver.js
@@ -1,18 +1,30 @@
const { parseAsync } = require('json2csv')
+const moment = require('moment')
+const _ = require('lodash/fp')
const logs = require('../../../logs')
const serverLogs = require('../../services/server-logs')
+const dateFormat = (timezone, logs) => _.map(log => {
+ const offset = timezone.split(':')[1]
+ return {
+ ...log,
+ timestamp: moment.utc(log.timestamp).utcOffset(parseInt(offset)).format('YYYY-MM-DDTHH:mm:ss.SSS')
+ }
+}, logs)
+
const resolvers = {
Query: {
machineLogs: (...[, { deviceId, from, until, limit, offset }]) =>
logs.simpleGetMachineLogs(deviceId, from, until, limit, offset),
- machineLogsCsv: (...[, { deviceId, from, until, limit, offset }]) =>
- logs.simpleGetMachineLogs(deviceId, from, until, limit, offset).then(parseAsync),
+ machineLogsCsv: (...[, { deviceId, from, until, limit, offset, timezone }]) =>
+ logs.simpleGetMachineLogs(deviceId, from, until, limit, offset)
+ .then(res => parseAsync(dateFormat(timezone, res))),
serverLogs: (...[, { from, until, limit, offset }]) =>
serverLogs.getServerLogs(from, until, limit, offset),
- serverLogsCsv: (...[, { from, until, limit, offset }]) =>
- serverLogs.getServerLogs(from, until, limit, offset).then(parseAsync)
+ serverLogsCsv: (...[, { from, until, limit, offset, timezone }]) =>
+ serverLogs.getServerLogs(from, until, limit, offset)
+ .then(res => parseAsync(dateFormat(timezone, res)))
}
}
diff --git a/lib/new-admin/graphql/resolvers/transaction.resolver.js b/lib/new-admin/graphql/resolvers/transaction.resolver.js
index 81829198..15457f98 100644
--- a/lib/new-admin/graphql/resolvers/transaction.resolver.js
+++ b/lib/new-admin/graphql/resolvers/transaction.resolver.js
@@ -1,5 +1,7 @@
const DataLoader = require('dataloader')
const { parseAsync } = require('json2csv')
+const moment = require('moment')
+const _ = require('lodash/fp')
const filters = require('../../filters')
const transactions = require('../../services/transactions')
@@ -18,6 +20,15 @@ const txLogFields = ['txClass', 'id', 'deviceId', 'toAddress', 'cryptoAtoms',
'customerIdCardDataExpiration', 'customerIdCardData', 'customerName',
'customerFrontCameraPath', 'customerIdCardPhotoPath', 'expired', 'machineName']
+const dateFormat = (timezone, logs) => _.map(log => {
+ const offset = timezone.split(':')[1]
+ return {
+ ...log,
+ created: moment.utc(log.created).utcOffset(parseInt(offset)).format('YYYY-MM-DDTHH:mm:ss.SSS'),
+ sendTime: moment.utc(log.sendTime).utcOffset(parseInt(offset)).format('YYYY-MM-DDTHH:mm:ss.SSS')
+ }
+}, logs)
+
const resolvers = {
Customer: {
transactions: parent => transactionsLoader.load(parent.id)
@@ -30,11 +41,11 @@ const resolvers = {
transactions.batch(from, until, limit, offset, deviceId, txClass, machineName, customerName, fiatCode, cryptoCode, toAddress, status),
transactionsCsv: (...[, { from, until, limit, offset, txClass, machineName, customerName, fiatCode, cryptoCode, toAddress, status }]) =>
transactions.batch(from, until, limit, offset, txClass, machineName, customerName, fiatCode, cryptoCode, toAddress, status)
- .then(data => parseAsync(data, {fields: tx_logFields})),
+ .then(data => parseAsync(data, { fields: tx_logFields, transforms: dateFormat(timezone, data) })),
transactionCsv: (...[, { id, txClass }]) =>
- transactions.getTx(id, txClass).then(parseAsync),
+ transactions.getTx(id, txClass).then(data => parseAsync(data)),
txAssociatedDataCsv: (...[, { id, txClass }]) =>
- transactions.getTxAssociatedData(id, txClass).then(parseAsync),
+ transactions.getTxAssociatedData(id, txClass).then(data => parseAsync(data)),
transactionFilters: () => filters.transaction()
}
}
diff --git a/lib/new-admin/graphql/types/log.type.js b/lib/new-admin/graphql/types/log.type.js
index 166cbfde..2c231147 100644
--- a/lib/new-admin/graphql/types/log.type.js
+++ b/lib/new-admin/graphql/types/log.type.js
@@ -17,9 +17,9 @@ const typeDef = gql`
type Query {
machineLogs(deviceId: ID!, from: Date, until: Date, limit: Int, offset: Int): [MachineLog] @auth
- machineLogsCsv(deviceId: ID!, from: Date, until: Date, limit: Int, offset: Int): String @auth
+ machineLogsCsv(deviceId: ID!, from: Date, until: Date, limit: Int, offset: Int, timezone: String): String @auth
serverLogs(from: Date, until: Date, limit: Int, offset: Int): [ServerLog] @auth
- serverLogsCsv(from: Date, until: Date, limit: Int, offset: Int): String @auth
+ serverLogsCsv(from: Date, until: Date, limit: Int, offset: Int, timezone: String): String @auth
}
`
diff --git a/new-lamassu-admin/src/components/LogsDownloaderPopper.js b/new-lamassu-admin/src/components/LogsDownloaderPopper.js
index 0945e9b2..8e26dcd7 100644
--- a/new-lamassu-admin/src/components/LogsDownloaderPopper.js
+++ b/new-lamassu-admin/src/components/LogsDownloaderPopper.js
@@ -11,6 +11,7 @@ import { ReactComponent as Arrow } from 'src/styling/icons/arrow/download_logs.s
import { ReactComponent as DownloadInverseIcon } from 'src/styling/icons/button/download/white.svg'
import { ReactComponent as Download } from 'src/styling/icons/button/download/zodiac.svg'
import { primaryColor, offColor, zircon } from 'src/styling/variables'
+import { formatDate } from 'src/utils/timezones'
import Popper from './Popper'
import DateRangePicker from './date-range-picker/DateRangePicker'
@@ -129,7 +130,14 @@ const useStyles = makeStyles(styles)
const ALL = 'all'
const RANGE = 'range'
-const LogsDownloaderPopover = ({ name, query, args, title, getLogs }) => {
+const LogsDownloaderPopover = ({
+ name,
+ query,
+ args,
+ title,
+ getLogs,
+ timezone
+}) => {
const [selectedRadio, setSelectedRadio] = useState(ALL)
const [range, setRange] = useState({ from: null, until: null })
const [anchorEl, setAnchorEl] = useState(null)
@@ -183,7 +191,7 @@ const LogsDownloaderPopover = ({ name, query, args, title, getLogs }) => {
const createLogsFile = (logs, range) => {
const formatDateFile = date => {
- return moment(date).format('YYYY-MM-DD_HH-mm')
+ return formatDate(date, timezone, 'YYYY-MM-DD_HH-mm')
}
const blob = new window.Blob([logs], {
diff --git a/new-lamassu-admin/src/pages/MachineLogs.js b/new-lamassu-admin/src/pages/MachineLogs.js
index a54c108d..7d1be1f7 100644
--- a/new-lamassu-admin/src/pages/MachineLogs.js
+++ b/new-lamassu-admin/src/pages/MachineLogs.js
@@ -39,12 +39,14 @@ const GET_MACHINE_LOGS_CSV = gql`
$limit: Int
$from: DateTime
$until: DateTime
+ $timezone: String
) {
machineLogsCsv(
deviceId: $deviceId
limit: $limit
from: $from
until: $until
+ timezone: $timezone
)
}
`
@@ -114,8 +116,9 @@ const Logs = () => {
title="Download logs"
name={selected.name}
query={GET_MACHINE_LOGS_CSV}
- args={{ deviceId }}
+ args={{ deviceId, timezone }}
getLogs={logs => R.path(['machineLogsCsv'])(logs)}
+ timezone={timezone}
/>
{saveMessage}
diff --git a/new-lamassu-admin/src/pages/ServerLogs.js b/new-lamassu-admin/src/pages/ServerLogs.js
index eac1297b..37873b5a 100644
--- a/new-lamassu-admin/src/pages/ServerLogs.js
+++ b/new-lamassu-admin/src/pages/ServerLogs.js
@@ -57,8 +57,18 @@ const SHOW_ALL = { code: 'SHOW_ALL', display: 'Show all' }
const NUM_LOG_RESULTS = 500
const GET_CSV = gql`
- query ServerData($limit: Int, $from: DateTime, $until: DateTime) {
- serverLogsCsv(limit: $limit, from: $from, until: $until)
+ query ServerData(
+ $limit: Int
+ $from: DateTime
+ $until: DateTime
+ $timezone: String
+ ) {
+ serverLogsCsv(
+ limit: $limit
+ from: $from
+ until: $until
+ timezone: $timezone
+ )
}
`
@@ -138,8 +148,10 @@ const Logs = () => {
title="Download logs"
name="server-logs"
query={GET_CSV}
+ args={{ timezone }}
logs={data.serverLogs}
getLogs={logs => R.path(['serverLogsCsv'])(logs)}
+ timezone={timezone}
/>
{saveMessage}
diff --git a/new-lamassu-admin/src/pages/Transactions/Transactions.js b/new-lamassu-admin/src/pages/Transactions/Transactions.js
index c1014aff..4bde18a5 100644
--- a/new-lamassu-admin/src/pages/Transactions/Transactions.js
+++ b/new-lamassu-admin/src/pages/Transactions/Transactions.js
@@ -35,8 +35,18 @@ const GET_DATA = gql`
`
const GET_TRANSACTIONS_CSV = gql`
- query transactions($limit: Int, $from: DateTime, $until: DateTime) {
- transactionsCsv(limit: $limit, from: $from, until: $until)
+ query transactions(
+ $limit: Int
+ $from: DateTime
+ $until: DateTime
+ $timezone: String
+ ) {
+ transactionsCsv(
+ limit: $limit
+ from: $from
+ until: $until
+ timezone: $timezone
+ )
}
`
@@ -271,7 +281,9 @@ const Transactions = () => {
title="Download logs"
name="transactions"
query={GET_TRANSACTIONS_CSV}
+ args={{ timezone }}
getLogs={logs => R.path(['transactionsCsv'])(logs)}
+ timezone={timezone}
/>
)}