UNPKG

2.7 kBJavaScriptView Raw
1#!/usr/bin/env node
2var async = require('async')
3var lodash = require('lodash')
4var chalk = require('chalk')
5var aws = require('aws-sdk')
6var region = process.env.AWS_REGION || 'us-east-1'
7var cw = new aws.CloudWatchLogs({region:region})
8var exists = require('path-exists').sync
9
10function stream(name, callback) {
11 cw.describeLogStreams({
12 logGroupName: name
13 }, callback)
14}
15
16var name = process.argv[2]
17if (lodash.isUndefined(name)) {
18 console.error('Error: missing path to the lambda')
19 process.exit(1)
20}
21
22var pkg = name + '/package.json'
23if (!exists(pkg)) {
24 console.error('Error: ' + pkg + ' does not exist')
25 console.error('\n')
26 console.error('Create a lambda with lambda-create in an npm script.')
27 console.error('\n')
28 process.exit(1)
29}
30
31var package = {
32 json: require(process.cwd() + '/' + pkg)
33}
34
35var actual = package.json.name
36if (lodash.isUndefined(actual)) {
37 console.error('Error: package.json missing name')
38 process.exit(1)
39}
40
41// setup the name
42name = '/aws/lambda/' + package.json.name
43
44// get the stream
45stream(name, (err, result)=> {
46
47 // get the events
48 var names = result.logStreams.map(l=> l.logStreamName)
49 var handlers = names.map(n=> {
50 return function (callback) {
51 var params = {
52 logGroupName: name,
53 logStreamName: n
54 }
55 cw.getLogEvents(params, callback)
56 }
57 })
58
59 // grab the events in parallel and then display then
60 async.parallel(handlers, (err, results)=> {
61 var events = lodash.flatten(results.map(r=>r.events))
62 events.forEach(e=> {
63
64 // ugh
65 var strftime = require('strftime')
66 var left = chalk.dim.green(' λ ') + chalk.grey.dim(strftime('%b%e,%l:%M:%S ', new Date(e.timestamp)))
67 var right = chalk.green(e.message)
68 var isStart = /START RequestId:/.test(e.message)
69 var isEnd = /END RequestId:/.test(e.message)
70 var isReport = /REPORT RequestId:/.test(e.message)
71 var logexp = /(\d+-\d+-\d+T\d+:\d+:\d+.\d+Z)\s+(\w+-\w+-\w+-\w+-\w+)/
72 var isLog = logexp.test(e.message)
73
74 if (isLog) {
75 var clean = e.message.replace(logexp, '')
76 console.log(left + chalk.dim.green(clean.split('\n').join('\n' + left)))
77 }
78
79 if (isReport) {
80 report = e.message.split('\t')
81 var sha = report[0].match(/REPORT RequestId: (\w+)-/)[1] // /REPORT RequestId: (\w+)-/.match(report[0])
82 var duration = report[1].replace('Duration:','')
83 right = chalk.cyan.underline.dim('@' + sha) + chalk.dim(duration)
84 console.log(left + right)
85 }
86
87 if (!isStart && !isEnd && !isReport && !isLog) {
88 right = chalk.green(right.split('\n').join('\n' + left))
89 console.log(left + right)
90 }
91 })
92 })
93})