Commit 64264e1614dfcd38624c068f87e1a107dda728c2

Authored by Adhidarma Hadiwinoto
1 parent a4ed48afba
Exists in master

log level

Showing 1 changed file with 10 additions and 2 deletions Inline Diff

1 var http = require('http'); 1 var http = require('http');
2 var url = require('url'); 2 var url = require('url');
3 var winston = require('winston'); 3 var winston = require('winston');
4 var strftime = require('strftime'); 4 var strftime = require('strftime');
5 var strptime = require('micro-strptime').strptime; 5 var strptime = require('micro-strptime').strptime;
6 var request = require('request'); 6 var request = require('request');
7 var striptags = require('striptags'); 7 var striptags = require('striptags');
8 var fs = require('fs'); 8 var fs = require('fs');
9 var ini = require('ini'); 9 var ini = require('ini');
10 10
11 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); 11 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8'));
12 12
13 var keepalive_interval = 2 * 60 * 1000; 13 var keepalive_interval = 2 * 60 * 1000;
14 14
15 var log_level = 'info';
16
17 if (config.globals.log_level) {
18 log_level = config.globals.log_level;
19 }
20
15 var logger = new (winston.Logger)({ 21 var logger = new (winston.Logger)({
16 transports: [ 22 transports: [
17 new (winston.transports.Console)({ 23 new (winston.transports.Console)({
18 timestamp: function() { 24 timestamp: function() {
19 return strftime('%F %T', new Date()); 25 return strftime('%F %T', new Date());
20 } 26 },
27 level: log_level
21 }), 28 }),
22 new (winston.transports.DailyRotateFile)({ 29 new (winston.transports.DailyRotateFile)({
23 filename: __dirname + '/logs/log', 30 filename: __dirname + '/logs/log',
24 timestamp: function() { 31 timestamp: function() {
25 return strftime('%F %T', new Date()); 32 return strftime('%F %T', new Date());
26 } 33 },
34 level: log_level
27 }) 35 })
28 ] 36 ]
29 }); 37 });
30 38
31 39
32 var ym = require('yahoomessenger'); 40 var ym = require('yahoomessenger');
33 ym.newInstance(); 41 ym.newInstance();
34 42
35 function onReady(){ 43 function onReady(){
36 ym.login(config.globals.username, config.globals.password); 44 ym.login(config.globals.username, config.globals.password);
37 } 45 }
38 46
39 function onLoginSuccessful(data) { 47 function onLoginSuccessful(data) {
40 logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.user_id + ')', {data: data}); 48 logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.user_id + ')', {data: data});
41 } 49 }
42 50
43 function sendIgnoreResponse(destination, message) { 51 function sendIgnoreResponse(destination, message) {
44 ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message); 52 ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message);
45 } 53 }
46 54
47 function onPm(data) { 55 function onPm(data) {
48 logger.verbose('onPM()', {data: data}); 56 logger.verbose('onPM()', {data: data});
49 57
50 var message = striptags(data.message); 58 var message = striptags(data.message);
51 var greeting_suffix = "Pesan anda telah diterima dan akan segera diproses:"; 59 var greeting_suffix = "Pesan anda telah diterima dan akan segera diproses:";
52 if (config.globals.greeting_prefix) { 60 if (config.globals.greeting_prefix) {
53 greeting_suffix = config.globals.greeting_prefix; 61 greeting_suffix = config.globals.greeting_prefix;
54 } 62 }
55 63
56 ym.sendPM(data.sender, greeting_suffix + ' ' + message); 64 ym.sendPM(data.sender, greeting_suffix + ' ' + message);
57 65
58 forwardMessageToEvo(data.sender, message, formatTimestamp(data.time)); 66 forwardMessageToEvo(data.sender, message, formatTimestamp(data.time));
59 } 67 }
60 68
61 function onOfflinePM(data) { 69 function onOfflinePM(data) {
62 logger.verbose('onOfflinePM()', {data: data}); 70 logger.verbose('onOfflinePM()', {data: data});
63 sendIgnoreResponse(data.sender, data.message); 71 sendIgnoreResponse(data.sender, data.message);
64 } 72 }
65 73
66 function onBuddyAddRequest(data) { 74 function onBuddyAddRequest(data) {
67 logger.info('onBuddyAddRequest()', {data: data}); 75 logger.info('onBuddyAddRequest()', {data: data});
68 ym.acceptAddBuddy(data.username); 76 ym.acceptAddBuddy(data.username);
69 logger.info('Accept buddy add request: ' + data.username, {data: data}); 77 logger.info('Accept buddy add request: ' + data.username, {data: data});
70 } 78 }
71 79
72 function onHttpIncomingMessage(request, response) { 80 function onHttpIncomingMessage(request, response) {
73 var qs = url.parse(request.url, true).query; 81 var qs = url.parse(request.url, true).query;
74 logger.info("onHttpIncomingMessage()", {qs: qs}); 82 logger.info("onHttpIncomingMessage()", {qs: qs});
75 83
76 var destination = qs.to.replace(config.globals.msisdn_suffix, ''); 84 var destination = qs.to.replace(config.globals.msisdn_suffix, '');
77 logger.info('Sending message to ' + destination + ': ' + qs.msg); 85 logger.info('Sending message to ' + destination + ': ' + qs.msg);
78 ym.sendPM(destination, qs.msg); 86 ym.sendPM(destination, qs.msg);
79 response.end('OK'); 87 response.end('OK');
80 } 88 }
81 89
82 function formatTimestamp(ts) { 90 function formatTimestamp(ts) {
83 var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z'); 91 var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z');
84 return strftime('%F %T', _ts); 92 return strftime('%F %T', _ts);
85 } 93 }
86 94
87 function forwardMessageToEvo(sender, message, ts) { 95 function forwardMessageToEvo(sender, message, ts) {
88 var msisdn = sender + config.globals.msisdn_suffix; 96 var msisdn = sender + config.globals.msisdn_suffix;
89 var opts = { 97 var opts = {
90 url: config.globals.evo_url, 98 url: config.globals.evo_url,
91 qs: { 99 qs: {
92 msg: message, 100 msg: message,
93 msisdn: msisdn, 101 msisdn: msisdn,
94 smsc: config.globals.smsc, 102 smsc: config.globals.smsc,
95 ts: ts 103 ts: ts
96 } 104 }
97 }; 105 };
98 106
99 logger.info("Forwarding message to evo", {request_opts: opts}); 107 logger.info("Forwarding message to evo", {request_opts: opts});
100 request(opts, function(err, response, body) { 108 request(opts, function(err, response, body) {
101 if (err) { 109 if (err) {
102 logger.warn('Error forwarding to evo: ' + err); 110 logger.warn('Error forwarding to evo: ' + err);
103 return; 111 return;
104 } 112 }
105 }); 113 });
106 } 114 }
107 115
108 function createHttpServer() { 116 function createHttpServer() {
109 logger.verbose('createHttpServer()'); 117 logger.verbose('createHttpServer()');
110 118
111 var httpServer = http.createServer(onHttpIncomingMessage); 119 var httpServer = http.createServer(onHttpIncomingMessage);
112 httpServer.listen(config.globals.listen_port, function(){ 120 httpServer.listen(config.globals.listen_port, function(){
113 logger.info("HTTP server listening on " + config.globals.listen_port); 121 logger.info("HTTP server listening on " + config.globals.listen_port);
114 }); 122 });
115 } 123 }
116 124
117 createHttpServer(); 125 createHttpServer();
118 ym.on('ready', onReady); 126 ym.on('ready', onReady);
119 ym.on('loginSuccessful', onLoginSuccessful); 127 ym.on('loginSuccessful', onLoginSuccessful);
120 ym.on('pm', onPm); 128 ym.on('pm', onPm);
121 ym.on('buddyAddRequest', onBuddyAddRequest); 129 ym.on('buddyAddRequest', onBuddyAddRequest);
122 130
123 setInterval(function() { 131 setInterval(function() {
124 logger.info('Sending keepalive packet'); 132 logger.info('Sending keepalive packet');
125 ym.keepAlive(); 133 ym.keepAlive();
126 }, keepalive_interval); 134 }, keepalive_interval);
127 135