|  |  |  | @ -1,6 +1,14 @@ | 
		
	
		
			
				|  |  |  |  | const http = require('http'); | 
		
	
		
			
				|  |  |  |  | const EventEmitter = require('events'); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | const STATUS = { | 
		
	
		
			
				|  |  |  |  |   OK: 200, | 
		
	
		
			
				|  |  |  |  |   BAD_REQUEST: 400, | 
		
	
		
			
				|  |  |  |  |   NOT_FOUND: 404, | 
		
	
		
			
				|  |  |  |  |   METHOD_NOT_ALLOWED: 405, | 
		
	
		
			
				|  |  |  |  |   INTERNAL_SERVER_ERROR: 500, | 
		
	
		
			
				|  |  |  |  | }; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | class LocalLokiServer extends EventEmitter { | 
		
	
		
			
				|  |  |  |  |   /** | 
		
	
		
			
				|  |  |  |  |    * Creates an instance of LocalLokiServer. | 
		
	
	
		
			
				
					|  |  |  | @ -11,47 +19,54 @@ class LocalLokiServer extends EventEmitter { | 
		
	
		
			
				|  |  |  |  |     this.server = http.createServer((req, res) => { | 
		
	
		
			
				|  |  |  |  |       let body = []; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       const sendResponse = (statusCode, message = null) => { | 
		
	
		
			
				|  |  |  |  |         const headers = message && { | 
		
	
		
			
				|  |  |  |  |           'Content-Type': 'text/plain', | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         res.writeHead(statusCode, headers); | 
		
	
		
			
				|  |  |  |  |         res.end(message); | 
		
	
		
			
				|  |  |  |  |       }; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       if (req.method !== 'POST') { | 
		
	
		
			
				|  |  |  |  |         sendResponse(STATUS.METHOD_NOT_ALLOWED); | 
		
	
		
			
				|  |  |  |  |         return; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       // Check endpoints
 | 
		
	
		
			
				|  |  |  |  |       if (req.method === 'POST') { | 
		
	
		
			
				|  |  |  |  |         req | 
		
	
		
			
				|  |  |  |  |           .on('error', () => { | 
		
	
		
			
				|  |  |  |  |             // Internal server error
 | 
		
	
		
			
				|  |  |  |  |             res.statusCode = 500; | 
		
	
		
			
				|  |  |  |  |             res.end(); | 
		
	
		
			
				|  |  |  |  |           }) | 
		
	
		
			
				|  |  |  |  |           .on('data', chunk => { | 
		
	
		
			
				|  |  |  |  |             body.push(chunk); | 
		
	
		
			
				|  |  |  |  |           }) | 
		
	
		
			
				|  |  |  |  |           .on('end', () => { | 
		
	
		
			
				|  |  |  |  |             try { | 
		
	
		
			
				|  |  |  |  |               body = Buffer.concat(body).toString(); | 
		
	
		
			
				|  |  |  |  |             } catch (e) { | 
		
	
		
			
				|  |  |  |  |               // Error occurred while converting to string
 | 
		
	
		
			
				|  |  |  |  |               res.statusCode = 500; | 
		
	
		
			
				|  |  |  |  |               res.end(); | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |       req | 
		
	
		
			
				|  |  |  |  |         .on('error', () => { | 
		
	
		
			
				|  |  |  |  |           // Internal server error
 | 
		
	
		
			
				|  |  |  |  |           sendResponse(STATUS.INTERNAL_SERVER_ERROR); | 
		
	
		
			
				|  |  |  |  |         }) | 
		
	
		
			
				|  |  |  |  |         .on('data', chunk => { | 
		
	
		
			
				|  |  |  |  |           body.push(chunk); | 
		
	
		
			
				|  |  |  |  |         }) | 
		
	
		
			
				|  |  |  |  |         .on('end', () => { | 
		
	
		
			
				|  |  |  |  |           try { | 
		
	
		
			
				|  |  |  |  |             body = Buffer.concat(body).toString(); | 
		
	
		
			
				|  |  |  |  |           } catch (e) { | 
		
	
		
			
				|  |  |  |  |             // Internal server error: failed to convert body to string
 | 
		
	
		
			
				|  |  |  |  |             sendResponse(STATUS.INTERNAL_SERVER_ERROR); | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             // Check endpoints here
 | 
		
	
		
			
				|  |  |  |  |             if (req.url === '/v1/storage_rpc') { | 
		
	
		
			
				|  |  |  |  |           // Check endpoints here
 | 
		
	
		
			
				|  |  |  |  |           if (req.url === '/v1/storage_rpc') { | 
		
	
		
			
				|  |  |  |  |             try { | 
		
	
		
			
				|  |  |  |  |               const bodyObject = JSON.parse(body); | 
		
	
		
			
				|  |  |  |  |               if (bodyObject.method !== 'store') { | 
		
	
		
			
				|  |  |  |  |                 res.writeHead(404, { 'Content-Type': 'text/plain' }); | 
		
	
		
			
				|  |  |  |  |                 res.end('Invalid endpoint!'); | 
		
	
		
			
				|  |  |  |  |                 sendResponse(STATUS.NOT_FOUND, 'Invalid endpoint!'); | 
		
	
		
			
				|  |  |  |  |                 return; | 
		
	
		
			
				|  |  |  |  |               } | 
		
	
		
			
				|  |  |  |  |               this.emit('message', bodyObject.params.data); | 
		
	
		
			
				|  |  |  |  |               res.statusCode = 200; | 
		
	
		
			
				|  |  |  |  |               res.end(); | 
		
	
		
			
				|  |  |  |  |             } else { | 
		
	
		
			
				|  |  |  |  |               res.writeHead(404, { 'Content-Type': 'text/plain' }); | 
		
	
		
			
				|  |  |  |  |               res.end('Invalid endpoint!'); | 
		
	
		
			
				|  |  |  |  |               sendResponse(STATUS.OK); | 
		
	
		
			
				|  |  |  |  |             } catch (e) { | 
		
	
		
			
				|  |  |  |  |               // Bad Request: Failed to decode json
 | 
		
	
		
			
				|  |  |  |  |               sendResponse(STATUS.BAD_REQUEST, 'Failed to decode JSON'); | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |           }); | 
		
	
		
			
				|  |  |  |  |       } else { | 
		
	
		
			
				|  |  |  |  |         // Method Not Allowed
 | 
		
	
		
			
				|  |  |  |  |         res.statusCode = 405; | 
		
	
		
			
				|  |  |  |  |         res.end(); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |           } else { | 
		
	
		
			
				|  |  |  |  |             sendResponse(STATUS.NOT_FOUND, 'Invalid endpoint!'); | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  |         }); | 
		
	
		
			
				|  |  |  |  |     }); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | 
 |