@@ -5,78 +5,88 @@ const config = require('config')
5
5
const pg = require ( 'pg' )
6
6
const logger = require ( './common/logger' )
7
7
const pushToKafka = require ( './services/pushToKafka' )
8
+ const pushToDynamoDb = require ( './services/pushToDynamoDb' )
8
9
const pgOptions = config . get ( 'POSTGRES' )
9
10
const pgConnectionString = `postgresql://${ pgOptions . user } :${ pgOptions . password } @${ pgOptions . host } :${ pgOptions . port } /${ pgOptions . database } `
10
11
const pgClient = new pg . Client ( pgConnectionString )
11
12
const auditTrail = require ( './services/auditTrail' ) ;
12
13
const express = require ( 'express' )
13
14
const app = express ( )
14
15
const port = 3000
15
- //console.log(`pgConnectionString value = ${pgConnectionString}`)
16
+ const isFailover = process . argv [ 2 ] != undefined ? ( process . argv [ 2 ] === 'failover' ? true : false ) : false
16
17
var pl_processid ;
17
- var pl_randonseq = 'err-' + ( new Date ( ) ) . getTime ( ) . toString ( 36 ) + Math . random ( ) . toString ( 36 ) . slice ( 2 ) ;
18
- async function setupPgClient ( ) {
19
- try {
20
- //console.log(`${pgOptions.triggerFunctions}`);
18
+ //var pl_randonseq = 'err-' + (new Date()).getTime().toString(36) + Math.random().toString(36).slice(2)
19
+ async function setupPgClient ( ) {
20
+ try {
21
21
await pgClient . connect ( )
22
22
for ( const triggerFunction of pgOptions . triggerFunctions ) {
23
23
await pgClient . query ( `LISTEN ${ triggerFunction } ` )
24
24
}
25
25
pgClient . on ( 'notification' , async ( message ) => {
26
- //const payload = JSON.parse(message.payload);
27
- pl_processid = message . processId ;
28
- //console.log(message);
29
- try
30
- {
26
+ // need to take care if empty message coming
27
+ pl_processid = message . processId
28
+ try {
31
29
const payload = JSON . parse ( message . payload )
32
- var pl_seqid = payload . payload . payloadseqid
33
- var pl_topic = payload . topic
34
- var pl_table = payload . payload . table
35
- var pl_uniquecolumn = payload . payload . Uniquecolumn
36
- var pl_operation = payload . payload . operation
37
- var pl_timestamp = payload . timestamp
38
- var pl_payload = JSON . stringify ( payload . payload )
39
- const validTopicAndOriginator = ( pgOptions . triggerTopics . includes ( payload . topic ) ) && ( pgOptions . triggerOriginators . includes ( payload . originator ) ) // Check if valid topic and originator
30
+ const validTopicAndOriginator = ( pgOptions . triggerTopics . includes ( payload . topic ) ) && ( pgOptions . triggerOriginators . includes ( payload . originator ) ) // Check if valid topic and originator
40
31
if ( validTopicAndOriginator ) {
41
- logger . debug ( `producer : ${ pl_seqid } ${ pl_processid } ${ pl_table } ${ pl_uniquecolumn } ${ pl_operation } ${ payload . timestamp } ` ) ;
42
- await pushToKafka ( payload )
43
- } else {
32
+ if ( isFailover ) {
33
+ await pushToDynamoDb ( payload )
34
+ } else {
35
+ await pushToKafka ( payload )
36
+ audit ( payload )
37
+ }
38
+ } else {
44
39
logger . debug ( 'Ignoring message with incorrect topic or originator' )
45
-
40
+ // push to slack - alertIt("slack message")
46
41
}
47
- await auditTrail ( [ pl_seqid , pl_processid , pl_table , pl_uniquecolumn , pl_operation , "push-to-kafka" , "" , "" , "" , pl_payload , pl_timestamp , pl_topic ] , 'producer' )
48
- } catch ( error ) {
42
+ } catch ( error ) {
49
43
logger . error ( 'Could not parse message payload' )
50
- logger . debug ( `error-sync: producer parse message : "${ error . message } "` )
51
- await auditTrail ( [ pl_randonseq , 1111 , 'pl_table' , 'pl_uniquecolumn' , 'pl_operation' , "error-producer" , "" , "" , error . message , 'pl_payload' , new Date ( ) , 'pl_topic' ] , 'producer' )
52
- logger . logFullError ( error )
44
+ logger . debug ( `error-sync: producer parse message : "${ error . message } "` )
45
+ //await auditTrail([pl_randonseq, 1111, 'pl_table', 'pl_uniquecolumn', 'pl_operation', "error-producer", "", "", error.message, 'pl_payload', new Date(), 'pl_topic'], 'producer')
46
+ logger . logFullError ( error )
47
+ // push to slack - alertIt("slack message"
53
48
}
54
49
} )
55
50
logger . info ( 'pg-ifx-sync producer: Listening to notifications' )
56
51
} catch ( err ) {
57
- logger . debug ( `error-sync: producer postgres-setup 1 :"${ err . message } "` )
52
+ logger . debug ( `error-sync: producer postgres-setup 1 :"${ err . message } "` )
58
53
logger . error ( 'Could not setup postgres client' )
59
54
logger . logFullError ( err )
60
55
61
56
terminate ( )
62
57
}
63
58
}
59
+
64
60
const terminate = ( ) => process . exit ( )
65
- async function run ( ) {
66
- try {
67
- await setupPgClient ( )
68
- }
69
- catch ( err )
70
- {
71
- logger . debug ( `Could not setup postgres client` )
72
- logger . debug ( `error-sync: producer postgres-setup 0 :"${ err . message } "` )
73
- }
61
+
62
+ async function run ( ) {
63
+ try {
64
+ await setupPgClient ( )
65
+ }
66
+ catch ( err ) {
67
+ logger . debug ( `Could not setup postgres client` )
68
+ logger . debug ( `error-sync: producer postgres-setup 0 :"${ err . message } "` )
69
+ terminate ( )
70
+ }
74
71
}
75
72
73
+ // execute
76
74
run ( )
77
75
76
+ async function audit ( ) {
77
+ var pl_seqid = payload . payload . payloadseqid
78
+ var pl_topic = payload . topic
79
+ var pl_table = payload . payload . table
80
+ var pl_uniquecolumn = payload . payload . Uniquecolumn
81
+ var pl_operation = payload . payload . operation
82
+ var pl_timestamp = payload . timestamp
83
+ var pl_payload = JSON . stringify ( payload . payload )
84
+ logger . debug ( `producer : ${ pl_seqid } ${ pl_processid } ${ pl_table } ${ pl_uniquecolumn } ${ pl_operation } ${ payload . timestamp } ` ) ;
85
+ auditTrail ( [ pl_seqid , pl_processid , pl_table , pl_uniquecolumn , pl_operation , "push-to-kafka" , "" , "" , "" , pl_payload , pl_timestamp , pl_topic ] , 'producer' )
86
+ }
87
+
78
88
app . get ( '/health' , ( req , res ) => {
79
- res . send ( 'health ok' )
89
+ res . send ( 'health ok' )
80
90
} )
81
91
app . listen ( port , ( ) => console . log ( `app listening on port ${ port } !` ) )
82
92
0 commit comments