Commit 0f78331eb082e1319eae57f20799040e6d812d52
1 parent
8510bfac57
Exists in
master
and in
1 other branch
Perbaikan symlink last dump
Showing 2 changed files with 4 additions and 18 deletions Inline Diff
lib/core-callback/dumper/req.js
1 | const MODULE_NAME = 'CORE-CALLBACK.DUMPER.REQ'; | 1 | const MODULE_NAME = 'CORE-CALLBACK.DUMPER.REQ'; |
2 | 2 | ||
3 | const fs = require('fs'); | 3 | const fs = require('fs'); |
4 | const fsPromise = require('fs').promises; | 4 | const fsPromise = require('fs').promises; |
5 | const path = require('path'); | 5 | const path = require('path'); |
6 | const config = require('komodo-sdk/config'); | 6 | const config = require('komodo-sdk/config'); |
7 | const logger = require('komodo-sdk/logger'); | 7 | const logger = require('komodo-sdk/logger'); |
8 | const moment = require('moment'); | 8 | const moment = require('moment'); |
9 | 9 | ||
10 | const baseDumpDir = 'dump'; | 10 | const baseDumpDir = 'dump'; |
11 | const subBaseDumpDir = path.join(baseDumpDir, 'core-callback'); | 11 | const subBaseDumpDir = path.join(baseDumpDir, 'core-callback'); |
12 | const lastSymbolicLinkName = path.join(subBaseDumpDir, 'last-req'); | 12 | const lastDumpFileName = path.join(subBaseDumpDir, 'last-req'); |
13 | 13 | ||
14 | if (!fs.existsSync(baseDumpDir)) { | 14 | if (!fs.existsSync(baseDumpDir)) { |
15 | logger.verbose(`${MODULE_NAME} B5785525: Creating base dump dir`); | 15 | logger.verbose(`${MODULE_NAME} B5785525: Creating base dump dir`); |
16 | fs.mkdirSync(baseDumpDir); | 16 | fs.mkdirSync(baseDumpDir); |
17 | } | 17 | } |
18 | 18 | ||
19 | if (!fs.existsSync(subBaseDumpDir)) { | 19 | if (!fs.existsSync(subBaseDumpDir)) { |
20 | logger.verbose(`${MODULE_NAME} 13BD289A: Creating dump dir`); | 20 | logger.verbose(`${MODULE_NAME} 13BD289A: Creating dump dir`); |
21 | fs.mkdirSync(subBaseDumpDir); | 21 | fs.mkdirSync(subBaseDumpDir); |
22 | } | 22 | } |
23 | 23 | ||
24 | module.exports = async (req, res, next) => { | 24 | module.exports = async (req, res, next) => { |
25 | if ( | 25 | if ( |
26 | !config | 26 | !config |
27 | || !config.listener | 27 | || !config.listener |
28 | || !config.listener.core | 28 | || !config.listener.core |
29 | || !config.listener.core.dump | 29 | || !config.listener.core.dump |
30 | ) { | 30 | ) { |
31 | next(); | 31 | next(); |
32 | return; | 32 | return; |
33 | } | 33 | } |
34 | 34 | ||
35 | const { xid } = res.locals; | 35 | const { xid } = res.locals; |
36 | 36 | ||
37 | const data = `-------- | 37 | const data = `-------- |
38 | XID: ${xid} | 38 | XID: ${xid} |
39 | PID: ${process.pid} | 39 | PID: ${process.pid} |
40 | DATE: ${moment().format('YYYY-MM-DD HH:mm:ss.SSS')} | 40 | DATE: ${moment().format('YYYY-MM-DD HH:mm:ss.SSS')} |
41 | 41 | ||
42 | REQ-CONTENT-TYPE: ${req.get('content-type')} | 42 | REQ-CONTENT-TYPE: ${req.get('content-type')} |
43 | 43 | ||
44 | REQ QUERY-STRING: | 44 | REQ QUERY-STRING: |
45 | ${JSON.stringify(req.query, null, 2)} | 45 | ${JSON.stringify(req.query, null, 2)} |
46 | 46 | ||
47 | REQ BODY: | 47 | REQ BODY: |
48 | ${JSON.stringify(req.body, null, 2)} | 48 | ${JSON.stringify(req.body, null, 2)} |
49 | `; | 49 | `; |
50 | 50 | ||
51 | const dumpDir = path.join( | 51 | const dumpDir = path.join( |
52 | subBaseDumpDir, | 52 | subBaseDumpDir, |
53 | moment().format('YYYY-MM-DD'), | 53 | moment().format('YYYY-MM-DD'), |
54 | ); | 54 | ); |
55 | 55 | ||
56 | try { | 56 | try { |
57 | await fsPromise.stat(dumpDir); | 57 | await fsPromise.stat(dumpDir); |
58 | } catch (e) { | 58 | } catch (e) { |
59 | await fsPromise.mkdir(dumpDir, { recursive: true }); | 59 | await fsPromise.mkdir(dumpDir, { recursive: true }); |
60 | } | 60 | } |
61 | 61 | ||
62 | const dumpFileName = path.join( | 62 | const dumpFileName = path.join( |
63 | dumpDir, | 63 | dumpDir, |
64 | [ | 64 | [ |
65 | 'req', | 65 | 'req', |
66 | moment().format('YYMMDD_HHmmss_SSS'), | 66 | moment().format('YYMMDD_HHmmss_SSS'), |
67 | xid, | 67 | xid, |
68 | ].join('_'), | 68 | ].join('_'), |
69 | ); | 69 | ); |
70 | 70 | ||
71 | await fsPromise.writeFile(dumpFileName, data); | 71 | await fsPromise.writeFile(dumpFileName, data); |
72 | 72 | await fsPromise.writeFile(lastDumpFileName, data); | |
73 | try { | ||
74 | await fsPromise.unlink(lastSymbolicLinkName); | ||
75 | } catch (e) { | ||
76 | // | ||
77 | } | ||
78 | |||
79 | await fsPromise.symlink(dumpFileName, lastSymbolicLinkName); | ||
80 | 73 | ||
81 | next(); | 74 | next(); |
82 | }; | 75 | }; |
83 | 76 |
lib/core-callback/dumper/sender.js
1 | const MODULE_NAME = 'CORE-CALLBACK.DUMPER.SENDER'; | 1 | const MODULE_NAME = 'CORE-CALLBACK.DUMPER.SENDER'; |
2 | 2 | ||
3 | const fs = require('fs'); | 3 | const fs = require('fs'); |
4 | const fsPromise = require('fs').promises; | 4 | const fsPromise = require('fs').promises; |
5 | const path = require('path'); | 5 | const path = require('path'); |
6 | const config = require('komodo-sdk/config'); | 6 | const config = require('komodo-sdk/config'); |
7 | const logger = require('komodo-sdk/logger'); | 7 | const logger = require('komodo-sdk/logger'); |
8 | const moment = require('moment'); | 8 | const moment = require('moment'); |
9 | 9 | ||
10 | const baseDumpDir = 'dump'; | 10 | const baseDumpDir = 'dump'; |
11 | const subBaseDumpDir = path.join(baseDumpDir, 'core-callback'); | 11 | const subBaseDumpDir = path.join(baseDumpDir, 'core-callback'); |
12 | const lastSymbolicLinkName = path.join(subBaseDumpDir, 'last-sent'); | 12 | const lastDumpFileName = path.join(subBaseDumpDir, 'last-sent'); |
13 | 13 | ||
14 | if (!fs.existsSync(baseDumpDir)) { | 14 | if (!fs.existsSync(baseDumpDir)) { |
15 | logger.verbose(`${MODULE_NAME} CE7EA06A: Creating base dump dir`); | 15 | logger.verbose(`${MODULE_NAME} CE7EA06A: Creating base dump dir`); |
16 | fs.mkdirSync(baseDumpDir); | 16 | fs.mkdirSync(baseDumpDir); |
17 | } | 17 | } |
18 | 18 | ||
19 | if (!fs.existsSync(subBaseDumpDir)) { | 19 | if (!fs.existsSync(subBaseDumpDir)) { |
20 | logger.verbose(`${MODULE_NAME} A9807434: Creating dump dir`); | 20 | logger.verbose(`${MODULE_NAME} A9807434: Creating dump dir`); |
21 | fs.mkdirSync(subBaseDumpDir); | 21 | fs.mkdirSync(subBaseDumpDir); |
22 | } | 22 | } |
23 | 23 | ||
24 | module.exports = async (xid, httpMethod, endpointUrl, params, axiosResponse, axiosError) => { | 24 | module.exports = async (xid, httpMethod, endpointUrl, params, axiosResponse, axiosError) => { |
25 | if ( | 25 | if ( |
26 | !config | 26 | !config |
27 | || !config.listener | 27 | || !config.listener |
28 | || !config.listener.core | 28 | || !config.listener.core |
29 | || !config.listener.core.dump | 29 | || !config.listener.core.dump |
30 | ) { | 30 | ) { |
31 | return; | 31 | return; |
32 | } | 32 | } |
33 | 33 | ||
34 | const data = `-------- | 34 | const data = `-------- |
35 | XID: ${xid} | 35 | XID: ${xid} |
36 | PID: ${process.pid} | 36 | PID: ${process.pid} |
37 | DATE: ${moment().format('YYYY-MM-DD HH:mm:ss.SSS')} | 37 | DATE: ${moment().format('YYYY-MM-DD HH:mm:ss.SSS')} |
38 | 38 | ||
39 | HTTP METHOD: ${httpMethod} | 39 | HTTP METHOD: ${httpMethod} |
40 | ENDPOINT URL: ${endpointUrl} | 40 | ENDPOINT URL: ${endpointUrl} |
41 | 41 | ||
42 | REQ PARAMS: | 42 | REQ PARAMS: |
43 | ${JSON.stringify(params, null, 2)} | 43 | ${JSON.stringify(params, null, 2)} |
44 | 44 | ||
45 | ERROR CODE: ${(axiosError && axiosError.code) || ''} | 45 | ERROR CODE: ${(axiosError && axiosError.code) || ''} |
46 | ERROR MESSAGE: ${(axiosError && axiosError.message) || ''} | 46 | ERROR MESSAGE: ${(axiosError && axiosError.message) || ''} |
47 | 47 | ||
48 | RES HTTP STATUS: ${axiosResponse && axiosResponse.status} | 48 | RES HTTP STATUS: ${axiosResponse && axiosResponse.status} |
49 | RES BODY: | 49 | RES BODY: |
50 | ${ | 50 | ${ |
51 | axiosResponse && axiosResponse.data && ( | 51 | axiosResponse && axiosResponse.data && ( |
52 | ((typeof axiosResponse.data === 'string') && axiosResponse.data) | 52 | ((typeof axiosResponse.data === 'string') && axiosResponse.data) |
53 | || JSON.stringify(axiosResponse.data, null, 2) | 53 | || JSON.stringify(axiosResponse.data, null, 2) |
54 | ) | 54 | ) |
55 | } | 55 | } |
56 | `; | 56 | `; |
57 | 57 | ||
58 | const dumpDir = path.join( | 58 | const dumpDir = path.join( |
59 | subBaseDumpDir, | 59 | subBaseDumpDir, |
60 | moment().format('YYYY-MM-DD'), | 60 | moment().format('YYYY-MM-DD'), |
61 | ); | 61 | ); |
62 | 62 | ||
63 | try { | 63 | try { |
64 | await fsPromise.stat(dumpDir); | 64 | await fsPromise.stat(dumpDir); |
65 | } catch (e) { | 65 | } catch (e) { |
66 | await fsPromise.mkdir(dumpDir, { recursive: true }); | 66 | await fsPromise.mkdir(dumpDir, { recursive: true }); |
67 | } | 67 | } |
68 | 68 | ||
69 | const dumpFileName = path.join( | 69 | const dumpFileName = path.join( |
70 | dumpDir, | 70 | dumpDir, |
71 | [ | 71 | [ |
72 | 'sent', | 72 | 'sent', |
73 | moment().format('YYMMDD_HHmmss_SSS'), | 73 | moment().format('YYMMDD_HHmmss_SSS'), |
74 | xid, | 74 | xid, |
75 | ].join('_'), | 75 | ].join('_'), |
76 | ); | 76 | ); |
77 | 77 | ||
78 | await fsPromise.writeFile(dumpFileName, data); | 78 | await fsPromise.writeFile(dumpFileName, data); |
79 | 79 | await fsPromise.writeFile(lastDumpFileName); | |
80 | try { | ||
81 | await fsPromise.unlink(lastSymbolicLinkName); | ||
82 | } catch (e) { | ||
83 | // | ||
84 | } | ||
85 | |||
86 | await fsPromise.symlink(dumpFileName, lastSymbolicLinkName); | ||
87 | }; | 80 | }; |
88 | 81 |