github.com/honeycombio/honeytail@v1.9.0/parsers/mongodb/logparser/log_line_test.go (about) 1 package logparser_test 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/honeycombio/honeytail/parsers/mongodb/logparser" 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestParseLogLine(t *testing.T) { 12 testCases := []struct { 13 line string 14 output string 15 }{ 16 { 17 line: "Mon Feb 23 03:20:19.670 [TTLMonitor] query local.system.indexes query: { expireAfterSeconds: { $exists: true } } ntoreturn:0 ntoskip:0 nscanned:0 keyUpdates:0 locks(micros) r:86 nreturned:0 reslen:20 0ms", 18 output: `{"context":"TTLMonitor","duration_ms":0,"keyUpdates":0,"locks(micros)":{"r":86},"namespace":"local.system.indexes","nreturned":0,"nscanned":0,"ntoreturn":0,"ntoskip":0,"operation":"query","query":{"expireAfterSeconds":{"$exists":true}},"reslen":20,"timestamp":"Mon Feb 23 03:20:19.670"}`, 19 }, 20 { 21 line: "2017-08-14T00:09:17.028-0400 I COMMAND [conn555555] query foo.bar query: { $query: { fieldA: /^123456789.?\\/test.?$/ } } planSummary: IXSCAN { fieldA: 1, fieldB: 1 } ntoreturn:0 ntoskip:0 nscanned:2 nscannedObjects:1 keyUpdates:0 writeConflicts:0 numYields:1 nreturned:1 reslen:1337 locks:{ Global: { acquireCount: { r: 4 } }, Database: { acquireCount: { r: 2 } }, Collection: { acquireCount: { r: 2 } } } 134ms", 22 output: `{"component":"COMMAND","context":"conn555555","duration_ms":134,"keyUpdates":0,"locks":{"Collection":{"acquireCount":{"r":2}},"Database":{"acquireCount":{"r":2}},"Global":{"acquireCount":{"r":4}}},"namespace":"foo.bar","nreturned":1,"nscanned":2,"nscannedObjects":1,"ntoreturn":0,"ntoskip":0,"numYields":1,"operation":"query","planSummary":[{"IXSCAN":{"fieldA":1,"fieldB":1}}],"query":{"$query":{"fieldA":"/^123456789.?\\/test.?$/"}},"reslen":1337,"severity":"informational","timestamp":"2017-08-14T00:09:17.028-0400","writeConflicts":0}`, 23 }, 24 { 25 line: "2020-10-22T01:55:27.585+0000 I COMMAND [conn111918] command cm.auditLog command: find { find: \"auditLog\", filter: { resourceLevelInfos.resourceId: { $in: [ \"5f90e685c8352e00014abb3f\" ] } }, projection: {}, $db: \"crisismanagement\", $clusterTime: { clusterTime: Timestamp(1603331719, 18), signature: { hash: BinData(0, 164ACBB1F99D1E544AAC2497483A20E6FEAF126A), keyId: 6860053861185355777 } }, lsid: { id: UUID(\"bac26ad1-3d76-4da1-94cc-d541942f6889\") } } planSummary: COLLSCAN keysExamined:0 docsExamined:4765871 cursorExhausted:1 numYields:37237 nreturned:2 reslen:3038 locks:{ Global: { acquireCount: { r: 37238 } }, Database: { acquireCount: { r: 37238 } }, Collection: { acquireCount: { r: 37238 } } } storage:{ data: { bytesRead: 485564359, timeReadingMicros: 366237 } } protocol:op_msg 7616ms", 26 output: `{"command":{"$clusterTime":{"clusterTime":"Timestamp(1603331719, 18)","signature":{"hash":"BinData(0, 164ACBB1F99D1E544AAC2497483A20E6FEAF126A)","keyId":6860053861185356000}},"$db":"crisismanagement","filter":{"resourceLevelInfos.resourceId":{"$in":["5f90e685c8352e00014abb3f"]}},"find":"auditLog","lsid":{"id":"UUID(\"bac26ad1-3d76-4da1-94cc-d541942f6889\")"},"projection":{}},"command_type":"find","component":"COMMAND","context":"conn111918","cursorExhausted":1,"docsExamined":4765871,"duration_ms":7616,"keysExamined":0,"locks":{"Collection":{"acquireCount":{"r":37238}},"Database":{"acquireCount":{"r":37238}},"Global":{"acquireCount":{"r":37238}}},"namespace":"cm.auditLog","nreturned":2,"numYields":37237,"operation":"command","planSummary":[{"COLLSCAN":true}],"protocol":"op_msg","reslen":3038,"severity":"informational","storage":{"data":{"bytesRead":485564359,"timeReadingMicros":366237}},"timestamp":"2020-10-22T01:55:27.585+0000"}`, 27 }, 28 } 29 for _, tc := range testCases { 30 doc, err := logparser.ParseLogLine(tc.line) 31 assert.NoError(t, err) 32 buf, _ := json.Marshal(doc) 33 assert.Equal(t, string(buf), tc.output) 34 } 35 }