@@ -9,6 +9,7 @@ const pushToKafka = require('./services/pushToKafka')
9
9
const healthcheck = require ( 'topcoder-healthcheck-dropin' ) ;
10
10
const auditTrail = require ( './services/auditTrail' ) ;
11
11
const kafkaOptions = config . get ( 'KAFKA' )
12
+ const postMessage = require ( './services/posttoslack' )
12
13
const isSslEnabled = kafkaOptions . SSL && kafkaOptions . SSL . cert && kafkaOptions . SSL . key
13
14
const consumer = new Kafka . SimpleConsumer ( {
14
15
connectionString : kafkaOptions . brokers_url ,
@@ -20,7 +21,6 @@ const consumer = new Kafka.SimpleConsumer({
20
21
} )
21
22
} )
22
23
23
-
24
24
const check = function ( ) {
25
25
if ( ! consumer . client . initialBrokers && ! consumer . client . initialBrokers . length ) {
26
26
return false ;
@@ -41,7 +41,7 @@ const terminate = () => process.exit()
41
41
* @param {String } topic The name of the message topic
42
42
* @param {Number } partition The kafka partition to which messages are written
43
43
*/
44
- //let message ;
44
+ var retryvar = "" ;
45
45
//let cs_payloadseqid;
46
46
async function dataHandler ( messageSet , topic , partition ) {
47
47
let cs_payloadseqid
@@ -54,10 +54,13 @@ let cs_payloadseqid
54
54
logger . debug ( `consumer : ${ message . payload . payloadseqid } ${ message . payload . table } ${ message . payload . Uniquecolumn } ${ message . payload . operation } ${ message . timestamp } ` ) ;
55
55
await updateInformix ( message )
56
56
await consumer . commitOffset ( { topic, partition, offset : m . offset } ) // Commit offset only on success
57
+ if ( message . payload [ 'retryCount' ] ) retryvar = message . payload . retryCount ;
57
58
auditTrail ( [ cs_payloadseqid , cs_processId , message . payload . table , message . payload . Uniquecolumn ,
58
- message . payload . operation , "Informix-updated" , "" , "" , "" , message . payload . data , message . timestamp , message . topic ] , 'consumer' )
59
+ message . payload . operation , "Informix-updated" , retryvar , "" , "" , message . payload . data , message . timestamp , message . topic ] , 'consumer' )
59
60
} catch ( err ) {
60
- logger . error ( `Could not process kafka message or informix DB error: "${ err . message } "` )
61
+ const errmsg2 = `Could not process kafka message or informix DB error: "${ err . message } "`
62
+ logger . error ( errmsg2 )
63
+ //await callposttoslack(errmsg2)
61
64
//logger.logFullError(err)
62
65
logger . debug ( `error-sync: consumer "${ err . message } "` )
63
66
if ( ! cs_payloadseqid ) {
@@ -67,40 +70,70 @@ let cs_payloadseqid
67
70
await auditTrail ( [ cs_payloadseqid , 3333 , 'message.payload.table' , 'message.payload.Uniquecolumn' ,
68
71
'message.payload.operation' , "Error-Consumer" , "" , err . message , "" , 'message.payload.data' , new Date ( ) , 'message.topic' ] , 'consumer' )
69
72
try {
70
- var retryvar
71
- if ( message . payload [ 'retryCount' ] ) retryvar = message . payload . retryCount ;
73
+ // var retryvar
74
+ if ( message . payload [ 'retryCount' ] ) retryvar = message . payload . retryCount ;
72
75
await consumer . commitOffset ( { topic, partition, offset : m . offset } ) // Commit success as will re-publish
73
76
await auditTrail ( [ cs_payloadseqid , 3333 , 'message.payload.table' , 'message.payload.Uniquecolumn' ,
74
77
'message.payload.operation' , "Informix-Updated1" , retryvar , "" , "" , 'message.payload.data' , new Date ( ) , 'message.topic' ] , 'consumer' )
75
- logger . debug ( `Trying to push same message after adding retryCounter` )
78
+ //await callposttoslack(`Retry for Kafka push : retrycount : "${retryvar}"`)
79
+ logger . debug ( `Trying to push same message after adding retryCounter` )
76
80
if ( ! message . payload . retryCount ) {
77
81
message . payload . retryCount = 0
78
82
logger . debug ( 'setting retry counter to 0 and max try count is : ' , config . KAFKA . maxRetry ) ;
79
83
}
80
84
if ( message . payload . retryCount >= config . KAFKA . maxRetry ) {
81
85
logger . debug ( 'Recached at max retry counter, sending it to error queue: ' , config . KAFKA . errorTopic ) ;
82
- logger . debug ( `error-sync: consumer max-retry-limit reached` )
83
- let notifiyMessage = Object . assign ( { } , message , { topic : config . KAFKA . errorTopic } )
86
+ logger . debug ( `error-sync: consumer max-retry-limit reached` )
87
+ // push to slack - alertIt("slack message"
88
+ await callposttoslack ( `error-sync: postgres-ifx-processor : consumer max-retry-limit reached: "${ message . payload . table } ": payloadseqid : "${ cs_payloadseqid } "` )
89
+ let notifiyMessage = Object . assign ( { } , message , { topic : config . KAFKA . errorTopic } )
84
90
notifiyMessage . payload [ 'recipients' ] = config . KAFKA . recipients
85
91
logger . debug ( 'pushing following message on kafka error alert queue:' )
86
92
//logger.debug(notifiyMessage)
87
- await pushToKafka ( notifiyMessage )
93
+ await pushToKafka ( notifiyMessage )
88
94
return
89
95
}
90
96
message . payload [ 'retryCount' ] = message . payload . retryCount + 1 ;
91
97
await pushToKafka ( message )
92
- logger . debug ( ` After kafka push Retry Count "${ message . payload . retryCount } "` )
98
+ var errmsg9 = `Retry for Kafka push : retrycount : "${ message . payload . retryCount } " : "${ cs_payloadseqid } "`
99
+ logger . debug ( errmsg9 )
100
+ //await callposttoslack(errmsg9)
93
101
} catch ( err ) {
94
102
95
103
await auditTrail ( [ cs_payloadseqid , cs_processId , message . payload . table , message . payload . Uniquecolumn ,
96
104
message . payload . operation , "Error-republishing" , message . payload [ 'retryCount' ] , err . message , "" , message . payload . data , message . timestamp , message . topic ] , 'consumer' )
97
- logger . error ( "Error occured in re-publishing kafka message" , err )
98
- logger . debug ( `error-sync: consumer re-publishing "${ err . message } "` )
105
+ const errmsg1 = `postgres-ifx-processor: consumer : Error-republishing: "${ err . message } "`
106
+ logger . error ( errmsg1 )
107
+ logger . debug ( `error-sync: consumer re-publishing "${ err . message } "` )
108
+ // push to slack - alertIt("slack message"
109
+ await callposttoslack ( errmsg1 )
99
110
}
100
111
}
101
112
}
102
113
}
103
114
115
+ async function callposttoslack ( slackmessage ) {
116
+ if ( config . SLACK . SLACKNOTIFY === 'true' ) {
117
+ return new Promise ( function ( resolve , reject ) {
118
+ postMessage ( slackmessage , ( response ) => {
119
+ console . log ( `respnse : ${ response } ` )
120
+ if ( response . statusCode < 400 ) {
121
+ logger . debug ( 'Message posted successfully' ) ;
122
+ //callback(null);
123
+ } else if ( response . statusCode < 500 ) {
124
+ const errmsg1 = `Slack Error: posting message to Slack API: ${ response . statusCode } - ${ response . statusMessage } `
125
+ logger . debug ( `error-sync: ${ errmsg1 } ` )
126
+ }
127
+ else {
128
+ logger . debug ( `Server error when processing message: ${ response . statusCode } - ${ response . statusMessage } ` ) ;
129
+ //callback(`Server error when processing message: ${response.statusCode} - ${response.statusMessage}`);
130
+ }
131
+ resolve ( "done" )
132
+ } ) ;
133
+ } ) //end
134
+ }
135
+
136
+ }
104
137
105
138
/**
106
139
* Initialize kafka consumer
0 commit comments