1+ var protobuf = require ( 'protocol-buffers' )
2+ var fs = require ( 'fs' )
3+ var net = require ( 'net' ) ;
4+ var client = new net . Socket ( ) ;
5+ var request = require ( 'request' ) ;
6+
7+ const stringToWrite = 'helloworld123'
8+ const pipe_file = '/tmp/pipe'
9+ var messages = protobuf ( `
10+ message LogEntry {
11+ string source = 1;
12+ int64 time_nano = 2;
13+ bytes line = 3;
14+ bool partial = 4;
15+ }
16+ ` )
17+
18+ const writeToPipe = ( ) => {
19+ // create a streaming encoder
20+ var buffer = messages . LogEntry . encode ( {
21+ source : 'test' ,
22+ time_nano : Date . now ( ) * 1000000 ,
23+ line : stringToWrite ,
24+ partial : false
25+ } ) ;
26+
27+ var buffer2 = Buffer . alloc ( 4 ) ;
28+ buffer2 . writeInt32BE ( buffer . length , 0 ) ;
29+
30+ var writeStream = fs . createWriteStream ( pipe_file )
31+
32+ writeStream . write ( buffer2 ) ;
33+ writeStream . write ( buffer ) ;
34+
35+ // close the stream
36+ writeStream . end ( ) ;
37+ }
38+ writeToPipe ( ) ;
39+
40+
41+ let reqObj = {
42+ "File" : pipe_file ,
43+ "Info" : {
44+ "ContainerID" : "dfjaksfdaslgsaf1213" ,
45+ "Config" : {
46+ "splunk-url" : "https://splunk-hec:8088" ,
47+ "splunk-token" : "00000000-0000-0000-0000-000000000000" ,
48+ "splunk-insecureskipverify" : "true" ,
49+ "splunk-format" : "raw"
50+ } ,
51+ "LogPath" : "/go/docker-logging-plugin/plugin/rootfs/test.txt"
52+ }
53+ } ;
54+
55+ request . post ( {
56+ headers : {
57+ 'Content-Type' : 'application/json' ,
58+ 'Host' : 'localhost'
59+ } ,
60+ url : 'http://unix:/run/docker/plugins/splunklog.sock:/LogDriver.StartLogging' ,
61+ json : reqObj
62+ } , ( error , response , body ) => {
63+ console . log ( body )
64+ if ( body . Err === '' ) {
65+ console . log ( 'Waiting for 10 sec till events get to splunk' )
66+ setTimeout ( ( ) => {
67+ verifyInSplunk ( ) ;
68+ } , 10000 ) ;
69+ }
70+ } )
71+
72+
73+ // For the follow http requests
74+ process . env . NODE_TLS_REJECT_UNAUTHORIZED = "0" ;
75+
76+ const url = 'https://splunk-hec:8089'
77+ const verifyInSplunk = ( ) => {
78+ request . post ( {
79+ url : url + '/services/search/jobs?output_mode=json' ,
80+ form : {
81+ earliest_time : '-15m' ,
82+ latest_time : 'now' ,
83+ search : `search index=main ${ stringToWrite } `
84+ } ,
85+ auth : {
86+ username : 'admin' ,
87+ password : 'changeme'
88+ } ,
89+ agentOptions : 'SSL_OP_NO_SSLv3'
90+ } , ( error , res , body ) => {
91+ if ( error ) {
92+ console . log ( "FAILED" , error ) ;
93+ return ;
94+ }
95+ let result = JSON . parse ( body ) ;
96+ let job_id = result [ 'sid' ] ;
97+ console . log ( 'sid' , job_id )
98+ console . log ( 'waiting for 2 sec' )
99+ setTimeout ( ( ) => {
100+ waitToGetResult ( job_id )
101+ } , 2000 ) ;
102+ } )
103+ }
104+
105+ const waitToGetResult = ( job ) => {
106+ const job_url = `${ url } /services/search/jobs/${ job } ?output_mode=json` ;
107+
108+ request . get ( {
109+ url : job_url ,
110+ auth : {
111+ username : 'admin' ,
112+ password : 'changeme'
113+ } ,
114+ agentOptions : 'SSL_OP_NO_SSLv3'
115+ } , ( err , res , body ) => {
116+ if ( err ) {
117+ console . log ( "FAILED" , err ) ;
118+ return ;
119+ }
120+ let result = JSON . parse ( body ) ;
121+ if ( result [ 'entry' ] [ 0 ] [ 'content' ] [ 'dispatchState' ] !== 'DONE' ) {
122+ console . log ( 'FAIL' ) ;
123+ return ;
124+ }
125+ console . log ( 'dispatchState=DONE' )
126+ getEvents ( job ) ;
127+ } )
128+ }
129+
130+ const getEvents = ( job ) => {
131+ const event_url = `${ url } /services/search/jobs/${ job } /events?output_mode=json` ;
132+ request . get ( {
133+ url : event_url ,
134+ auth : {
135+ username : 'admin' ,
136+ password : 'changeme'
137+ } ,
138+ agentOptions : 'SSL_OP_NO_SSLv3'
139+ } , ( err , res , body ) => {
140+ if ( err ) {
141+ console . log ( "FAILED" , err ) ;
142+ return ;
143+ }
144+ let result = JSON . parse ( body ) ;
145+ if ( result [ 'results' ] && result [ 'results' ] . length > 0 ) {
146+ console . log ( 'PASS' )
147+ } else {
148+ console . log ( 'FAIL: 0 result' )
149+ }
150+ } )
151+ }
0 commit comments