Skip to content

Commit

Permalink
feat(cli): improve logging
Browse files Browse the repository at this point in the history
  • Loading branch information
Red-Asuka committed Sep 21, 2022
1 parent 0010555 commit 57460b9
Show file tree
Hide file tree
Showing 9 changed files with 273 additions and 13 deletions.
3 changes: 3 additions & 0 deletions cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,21 @@
},
"license": "Apache-2.0",
"dependencies": {
"chalk": "~4.1.2",
"commander": "^9.3.0",
"concat-stream": "^2.0.0",
"mqtt": "^4.3.7",
"pump": "^3.0.0",
"readable-stream": "^3.6.0",
"signale": "^1.4.0",
"split2": "^4.1.0"
},
"devDependencies": {
"@types/concat-stream": "^2.0.0",
"@types/node": "^17.0.43",
"@types/pump": "^1.1.1",
"@types/readable-stream": "^2.3.13",
"@types/signale": "^1.4.4",
"@types/split2": "^3.2.1",
"@types/ws": "^8.5.3",
"typescript": "^4.7.3"
Expand Down
7 changes: 5 additions & 2 deletions cli/src/lib/conn.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import * as mqtt from 'mqtt'
import * as fs from 'fs'
import signale from '../utils/signale'

const conn = (options: any) => {
options.protocolVersion = options.mqttVersion
Expand Down Expand Up @@ -43,12 +44,14 @@ const conn = (options: any) => {

const client = mqtt.connect(options)

signale.await('Connecting...')

client.on('connect', () => {
console.log('\x1b[32m', 'Connected')
signale.success('Connected')
})

client.on('error', (err) => {
console.warn(err)
signale.error(err)
client.end()
})
}
Expand Down
12 changes: 10 additions & 2 deletions cli/src/lib/pub.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,33 @@ import concat from 'concat-stream'
import { Writable } from 'readable-stream'
import split2 from 'split2'
import { IClientPublishOptions } from 'mqtt'
import signale from '../utils/signale'

const send = (options: any, pubOptions: IClientPublishOptions) => {
const client = mqtt.connect(options)
signale.await('Connecting...')
client.on('connect', () => {
signale.success('Connected')
const { topic, message } = options
signale.await('Message Publishing...')
client.publish(topic, message, pubOptions, (err) => {
if (err) {
console.warn(err)
signale.warn(err)
} else {
signale.success('Message published')
}
client.end()
})
})
client.on('error', (err) => {
console.warn(err)
signale.error(err)
client.end()
})
}

const multisend = (options: any, pubOptions: IClientPublishOptions) => {
const client = mqtt.connect(options)
signale.await('Connecting...')
const sender = new Writable({
objectMode: true,
})
Expand All @@ -33,6 +40,7 @@ const multisend = (options: any, pubOptions: IClientPublishOptions) => {
}

client.on('connect', () => {
signale.success('Connected, press Enter to publish, press Ctrl+C to exit')
pump(process.stdin, split2(), sender, (err) => {
client.end()
if (err) {
Expand Down
23 changes: 17 additions & 6 deletions cli/src/lib/sub.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import * as mqtt from 'mqtt'
import * as fs from 'fs'
import { IClientSubscribeOptions } from 'mqtt'
import { getSpecialTypesOption } from '../utils/generator'
import { signale, msgLog } from '../utils/signale'

const sub = (options: any) => {
options.protocolVersion = options.mqttVersion
Expand Down Expand Up @@ -41,7 +42,11 @@ const sub = (options: any) => {

const client = mqtt.connect(options)

signale.await('Connecting...')

client.on('connect', () => {
signale.success('Connected')

const { topic, qos, no_local, retainAsPublished, retainHandling, userProperties } = options

topic.forEach((t: string, index: number) => {
Expand All @@ -55,15 +60,19 @@ const sub = (options: any) => {
userProperties && (subOptions.properties = { userProperties })
}

signale.await(`Subscribing to ${t}...`)

client.subscribe(t, subOptions, (err, result) => {
if (err) {
console.error(err)
signale.error(err)
process.exit(1)
} else {
signale.success(`Subscribed to ${t}`)
}

result.forEach((sub) => {
if (sub.qos > 2) {
console.error('subscription negated to', sub.topic, 'with code', sub.qos)
signale.error('subscription negated to', sub.topic, 'with code', sub.qos)
process.exit(1)
}
})
Expand All @@ -72,17 +81,19 @@ const sub = (options: any) => {
})

client.on('message', (topic, payload, packet) => {
const msgData: Record<string, unknown>[] = []
if (options.verbose) {
console.log('topic: ', topic)
msgData.push({ label: 'topic', value: topic })
}
if (packet.properties && packet.properties.userProperties) {
console.log('user properties: ', { ...packet.properties.userProperties })
msgData.push({ label: 'user properties', value: { ...packet.properties.userProperties } })
}
console.log('payload: ', payload.toString())
msgData.push({ label: 'payload', value: payload.toString() })
msgLog(msgData)
})

client.on('error', (err) => {
console.warn(err)
signale.error(err)
client.end()
})
}
Expand Down
28 changes: 28 additions & 0 deletions cli/src/utils/signale.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Signale } from 'signale'
import chalk from 'chalk'
import { inspect } from 'util'

const option = {
config: {
displayLabel: false,
displayTimestamp: true,
},
}

const signale = new Signale(option)

const msgLog = (msg: Record<string, unknown>[]) => {
let chalkString = ''
msg.forEach((item) => {
if (typeof item.value === 'object') {
chalkString += `${chalk.green(item.label)}: ${inspect(item.value, false, null, true)}\n`
} else {
chalkString += `${chalk.green(item.label)}: ${item.value}\n`
}
})
signale.log(`${chalkString}`)
}

export { signale, msgLog }

export default signale
3 changes: 2 additions & 1 deletion cli/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
"lib": ["DOM", "ES2015", "ScriptHost", "ES2019.Array"],
"strict": true,
"esModuleInterop": true,
"resolveJsonModule": true
"resolveJsonModule": true,
"types": ["@types/signale"]
},
"include": ["src"]
}
Loading

0 comments on commit 57460b9

Please sign in to comment.