From 2c701b94161d7c332e40a7de57d69928e8870110 Mon Sep 17 00:00:00 2001 From: Owen Pearson Date: Tue, 21 Sep 2021 17:44:15 +0100 Subject: [PATCH] convert types/stats to typescript --- common/lib/types/stats.js | 126 ---------------- common/lib/types/stats.ts | 308 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 308 insertions(+), 126 deletions(-) delete mode 100644 common/lib/types/stats.js create mode 100644 common/lib/types/stats.ts diff --git a/common/lib/types/stats.js b/common/lib/types/stats.js deleted file mode 100644 index 61adb862fe..0000000000 --- a/common/lib/types/stats.js +++ /dev/null @@ -1,126 +0,0 @@ -import Utils from '../util/utils'; - -var Stats = (function() { - - function MessageCount(values) { - this.count = (values && values.count) || 0; - this.data = (values && values.data) || 0; - this.uncompressedData = (values && values.uncompressedData) || 0; - this.failed = (values && values.failed) || 0; - this.refused = (values && values.refused) || 0; - } - - function MessageCategory(values) { - var self = this; - MessageCount.call(this, values); - this.category = undefined; - if (values && values.category) { - this.category = { }; - Utils.forInOwnNonNullProps(values.category, function(prop) { - self.category[prop] = new MessageCount(values.category[prop]); - }); - } - } - - function ResourceCount(values) { - this.peak = (values && values.peak) || 0; - this.min = (values && values.min) || 0; - this.mean = (values && values.mean) || 0; - this.opened = (values && values.opened) || 0; - this.refused = (values && values.refused) || 0; - } - - function RequestCount(values) { - this.succeeded = (values && values.succeeded) || 0; - this.failed = (values && values.failed) || 0; - this.refused = (values && values.refused) || 0; - } - - function ConnectionTypes(values) { - this.plain = new ResourceCount(values && values.plain); - this.tls = new ResourceCount(values && values.tls); - this.all = new ResourceCount(values && values.all); - } - - function MessageTypes(values) { - this.messages = new MessageCategory(values && values.messages); - this.presence = new MessageCategory(values && values.presence); - this.all = new MessageCategory(values && values.all); - } - - function MessageTraffic(values) { - this.realtime = new MessageTypes(values && values.realtime); - this.rest = new MessageTypes(values && values.rest); - this.webhook = new MessageTypes(values && values.webhook); - this.sharedQueue = new MessageTypes(values && values.sharedQueue); - this.externalQueue = new MessageTypes(values && values.externalQueue); - this.httpEvent = new MessageTypes(values && values.httpEvent); - this.push = new MessageTypes(values && values.push); - this.all = new MessageTypes(values && values.all); - } - - function MessageDirections(values) { - this.all = new MessageTypes(values && values.all); - this.inbound = new MessageTraffic(values && values.inbound); - this.outbound = new MessageTraffic(values && values.outbound); - } - - function XchgMessages(values) { - this.all = new MessageTypes(values && values.all); - this.producerPaid = new MessageDirections(values && values.producerPaid); - this.consumerPaid = new MessageDirections(values && values.consumerPaid); - } - - function PushStats(values) { - this.messages = (values && values.messages) || 0; - var notifications = values && values.notifications; - this.notifications = { - invalid: notifications && notifications.invalid || 0, - attempted: notifications && notifications.attempted || 0, - successful: notifications && notifications.successful || 0, - failed: notifications && notifications.failed || 0 - }; - this.directPublishes = (values && values.directPublishes) || 0; - } - - function ProcessedCount(values) { - this.succeeded = (values && values.succeeded) || 0; - this.skipped = (values && values.skipped) || 0; - this.failed = (values && values.failed) || 0; - } - - function ProcessedMessages(values) { - var self = this; - this.delta = undefined; - if (values && values.delta) { - this.delta = { }; - Utils.forInOwnNonNullProps(values.delta, function(prop) { - self.delta[prop] = new ProcessedCount(values.delta[prop]); - }); - } - } - - function Stats(values) { - MessageDirections.call(this, values); - this.persisted = new MessageTypes(values && values.persisted); - this.connections = new ConnectionTypes(values && values.connections); - this.channels = new ResourceCount(values && values.channels); - this.apiRequests = new RequestCount(values && values.apiRequests); - this.tokenRequests = new RequestCount(values && values.tokenRequests); - this.xchgProducer = new XchgMessages(values && values.xchgProducer); - this.xchgConsumer = new XchgMessages(values && values.xchgConsumer); - this.push = new PushStats(values && values.pushStats); - this.processed = new ProcessedMessages(values && values.processed); - this.inProgress = (values && values.inProgress) || undefined; - this.unit = (values && values.unit) || undefined; - this.intervalId = (values && values.intervalId) || undefined; - } - - Stats.fromValues = function(values) { - return new Stats(values); - }; - - return Stats; -})(); - -export default Stats; diff --git a/common/lib/types/stats.ts b/common/lib/types/stats.ts new file mode 100644 index 0000000000..2ae3a3695a --- /dev/null +++ b/common/lib/types/stats.ts @@ -0,0 +1,308 @@ +import forInOwnNonNullProps from '../util/forInOwnNonNullProps'; + +type MessageValues = { + count?: number; + data?: number; + uncompressedData?: number; + failed?: number; + refused?: number; + category?: Record; +} + +type ResourceValues = { + peak?: number; + min?: number; + mean?: number; + opened?: number; + refused?: number; +} + +type RequestValues = { + succeeded?: number; + failed?: number; + refused?: number; +} + +type ConnectionTypesValues = { + plain?: ResourceValues; + tls?: ResourceValues; + all?: ResourceValues; +} + +type MessageTypesValues = { + messages?: MessageValues; + presence?: MessageValues; + all?: MessageValues; +} + +type MessageTrafficValues = { + realtime?: MessageTypesValues; + rest?: MessageTypesValues; + webhook?: MessageTypesValues; + sharedQueue?: MessageTypesValues; + externalQueue?: MessageTypesValues; + httpEvent?: MessageTypesValues; + push?: MessageTypesValues; + all?: MessageTypesValues; +} + +type MessageDirectionsValues = { + all?: MessageTypesValues; + inbound?: MessageTrafficValues; + outbound?: MessageTrafficValues; +} + +type XchgMessagesValues = { + all?: MessageTypesValues; + producerPaid?: MessageDirectionsValues; + consumerPaid?: MessageDirectionsValues; +} + +type NotificationsValues = { + invalid?: number; + attempted?: number; + successful?: number; + failed?: number; +} + +type PushValues = { + messages?: number; + notifications?: NotificationsValues; + directPublishes?: number; +} + +type ProcessedCountValues = { + succeeded?: number; + skipped?: number; + failed?: number; +} + +type ProcessedMessagesValues = { + delta?: Record; +} + +type StatsValues = { + all?: MessageTypesValues; + inbound?: MessageTrafficValues; + outbound?: MessageTrafficValues; + persisted?: MessageTypesValues; + connections?: ConnectionTypesValues; + channels?: ResourceValues; + apiRequests?: RequestValues; + tokenRequests?: RequestValues; + xchgProducer?: XchgMessagesValues; + xchgConsumer?: XchgMessagesValues; + pushStats?: PushValues; + processed?: ProcessedMessagesValues; + inProgress?: never; + unit?: never; + intervalId?: never; +} + +class MessageCount { + count?: number; + data?: number; + uncompressedData?: number; + failed?: number; + refused?: number; + + constructor(values?: MessageValues) { + this.count = (values && values.count) || 0; + this.data = (values && values.data) || 0; + this.uncompressedData = (values && values.uncompressedData) || 0; + this.failed = (values && values.failed) || 0; + this.refused = (values && values.refused) || 0; + } +} + +class MessageCategory extends MessageCount { + category?: Record; + constructor(values?: MessageValues) { + super(values); + if (values && values.category) { + this.category = {}; + forInOwnNonNullProps(values.category, (prop: string) => { + (this.category as Record)[prop] = new MessageCount((values.category as Record)[prop]); + }); + } + } +} + +class ResourceCount { + peak?: number; + min?: number; + mean?: number; + opened?: number; + refused?: number; + + constructor(values?: ResourceValues) { + this.peak = (values && values.peak) || 0; + this.min = (values && values.min) || 0; + this.mean = (values && values.mean) || 0; + this.opened = (values && values.opened) || 0; + this.refused = (values && values.refused) || 0; + } +} + +class RequestCount { + succeeded?: number; + failed?: number; + refused?: number; + + constructor(values?: RequestValues) { + this.succeeded = (values && values.succeeded) || 0; + this.failed = (values && values.failed) || 0; + this.refused = (values && values.refused) || 0; + } +} + +class ConnectionTypes { + plain?: ResourceCount; + tls?: ResourceCount; + all?: ResourceCount; + + constructor(values?: ConnectionTypesValues) { + this.plain = new ResourceCount(values && values.plain); + this.tls = new ResourceCount(values && values.tls); + this.all = new ResourceCount(values && values.all); + } +} + +class MessageTypes { + messages?: MessageCategory; + presence?: MessageCategory; + all?: MessageCategory; + + constructor(values?: MessageTypesValues) { + this.messages = new MessageCategory(values && values.messages); + this.presence = new MessageCategory(values && values.presence); + this.all = new MessageCategory(values && values.all); + } +} + +class MessageTraffic { + realtime?: MessageTypes; + rest?: MessageTypes; + webhook?: MessageTypes; + sharedQueue?: MessageTypes; + externalQueue?: MessageTypes; + httpEvent?: MessageTypes; + push?: MessageTypes; + all?: MessageTypes; + + constructor(values?: MessageTrafficValues) { + this.realtime = new MessageTypes(values && values.realtime); + this.rest = new MessageTypes(values && values.rest); + this.webhook = new MessageTypes(values && values.webhook); + this.sharedQueue = new MessageTypes(values && values.sharedQueue); + this.externalQueue = new MessageTypes(values && values.externalQueue); + this.httpEvent = new MessageTypes(values && values.httpEvent); + this.push = new MessageTypes(values && values.push); + this.all = new MessageTypes(values && values.all); + } +} + +class MessageDirections { + all?: MessageTypes; + inbound?: MessageTraffic; + outbound?: MessageTraffic; + + constructor(values?: MessageDirectionsValues) { + this.all = new MessageTypes(values && values.all); + this.inbound = new MessageTraffic(values && values.inbound); + this.outbound = new MessageTraffic(values && values.outbound); + } +} + +class XchgMessages { + all?: MessageTypes; + producerPaid?: MessageDirections; + consumerPaid?: MessageDirections; + + constructor(values?: XchgMessagesValues) { + this.all = new MessageTypes(values && values.all); + this.producerPaid = new MessageDirections(values && values.producerPaid); + this.consumerPaid = new MessageDirections(values && values.consumerPaid); + } +} + +class PushStats { + messages?: number; + notifications?: NotificationsValues; + directPublishes?: number; + + constructor(values?: PushValues) { + this.messages = (values && values.messages) || 0; + let notifications = values && values.notifications; + this.notifications = { + invalid: notifications && notifications.invalid || 0, + attempted: notifications && notifications.attempted || 0, + successful: notifications && notifications.successful || 0, + failed: notifications && notifications.failed || 0 + }; + this.directPublishes = (values && values.directPublishes) || 0; + } +} + +class ProcessedCount { + succeeded?: number; + skipped?: number; + failed?: number; + + constructor(values: ProcessedCountValues) { + this.succeeded = (values && values.succeeded) || 0; + this.skipped = (values && values.skipped) || 0; + this.failed = (values && values.failed) || 0; + } +} + +class ProcessedMessages { + delta?: Record; + + constructor(values?: ProcessedMessagesValues) { + this.delta = undefined; + if (values && values.delta) { + this.delta = { }; + forInOwnNonNullProps(values.delta, (prop: string) => { + (this.delta as Record)[prop] = new ProcessedCount((values.delta as Record)[prop]); + }); + } + } +} + +class Stats extends MessageDirections { + persisted?: MessageTypes; + connections?: ConnectionTypes; + channels?: ResourceCount; + apiRequests?: RequestCount; + tokenRequests?: RequestCount; + xchgProducer?: XchgMessages; + xchgConsumer?: XchgMessages; + push?: PushStats; + processed?: ProcessedMessages; + inProgress?: never; + unit?: never; + intervalId?: never; + + constructor(values?: StatsValues) { + super(values as MessageDirectionsValues); + this.persisted = new MessageTypes(values && values.persisted); + this.connections = new ConnectionTypes(values && values.connections); + this.channels = new ResourceCount(values && values.channels); + this.apiRequests = new RequestCount(values && values.apiRequests); + this.tokenRequests = new RequestCount(values && values.tokenRequests); + this.xchgProducer = new XchgMessages(values && values.xchgProducer); + this.xchgConsumer = new XchgMessages(values && values.xchgConsumer); + this.push = new PushStats(values && values.pushStats); + this.processed = new ProcessedMessages(values && values.processed); + this.inProgress = (values && values.inProgress) || undefined; + this.unit = (values && values.unit) || undefined; + this.intervalId = (values && values.intervalId) || undefined; + } + + static fromValues(values: StatsValues) { + return new Stats(values); + } +} + +export default Stats;