Advertisement
Guest User

Untitled

a guest
Aug 29th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.25 KB | None | 0 0
  1. require('dotenv').load();
  2. var Redshift = require('node-redshift');
  3. var SQL = require('sql-template-strings');
  4. var Store = require('jfs');
  5.  
  6. var sessions_db = new Store('../botkit/lib/storage/sessions');
  7. var users_db = new Store('../botkit/lib/storage/users');
  8.  
  9. var client = {
  10.   user: process.env.Redshift_user,
  11.   database: process.env.Redshift_database,
  12.   password: process.env.Redshift_password,
  13.   port: process.env.Redshift_port,
  14.   host: process.env.Redshift_host
  15. };
  16.  
  17. var redshift  = new Redshift(client);
  18.  
  19. if (!process.env.Redshift_user) {
  20. console.log('Error: Specify Redshift_user in environment');
  21. process.exit(1);
  22. }
  23.  
  24. if (!process.env.Redshift_database) {
  25. console.log('Error: Specify Redshift_database in environment');
  26. process.exit(1);
  27. }
  28.  
  29. if (!process.env.Redshift_password) {
  30. console.log('Error: Specify Redshift_password in environment');
  31. process.exit(1);
  32. }
  33.  
  34. if (!process.env.Redshift_port) {
  35. console.log('Error: Specify Redshift_port in environment');
  36. process.exit(1);
  37. }
  38.  
  39. if (!process.env.Redshift_host) {
  40. console.log('Error: Specify Redshift_host in environment');
  41. process.exit(1);
  42. }
  43.  
  44.  
  45. var schedule = require('node-schedule');
  46.  
  47. var rule = new schedule.RecurrenceRule();
  48.  
  49. rule.second = [0, 15, 30, 45];
  50.  
  51. var j = schedule.scheduleJob(rule, function() {
  52.  
  53. var sessions = sessions_db.allSync();
  54. var users = users_db.allSync();
  55.  
  56. var sessions_list = Object.keys(sessions);
  57. var users_list = Object.keys(users);
  58.  
  59. var last_sessionIds = [];
  60.  
  61. // Collect the ID of the last sessions of every user :
  62. for (var user in users) {
  63.  
  64. var userInfo = users[user];
  65. var last_sessionId = userInfo.last_session;
  66.  
  67. // Construct an array with all the last sessions :
  68. last_sessionIds = last_sessionIds.concat(last_sessionId);
  69.  
  70. };
  71.  
  72.  
  73. // For each session id in the current local DB :
  74. for (var sessionid in sessions_list) {
  75.  
  76. console.log(sessionid);
  77.  
  78. var add_it = true;
  79.  
  80. // Check if session id is part of the last session :
  81. for(var i = 0 ; i < last_sessionIds.length; i++){
  82. if ( sessions_list[sessionid] == last_sessionIds[i]){
  83. add_it = false;
  84. break;
  85. }
  86. }
  87.  
  88. // If the session is not in the last session, then push it to Redshift
  89. if (add_it) {
  90.  
  91.  
  92. var session_uuid = sessions_list[sessionid];
  93. console.log(session_uuid);
  94. var start_time = sessions[sessions_list[sessionid]].start_time;
  95. var user_uuid = sessions[sessions_list[sessionid]].userid;
  96. var messages = sessions[sessions_list[sessionid]].messages;
  97.  
  98. //ADD redshift push
  99. redshift.query(SQL`INSERT INTO sessions (id, start_time, userid) VALUES (${session_uuid},${start_time}, ${user_uuid})`, {raw: true})
  100. .then(function(){
  101.  
  102. for ( message in messages ) {
  103.  
  104. var mess_uuid = messages[message].mess_uuid;
  105. var content = messages[message].content;
  106. var received_at = messages[message].received_at;
  107. var intent = messages[message].intent;
  108. var entity = messages[message].entity;
  109. var resp_uuid = messages[message].resp_uuid;
  110.  
  111.  
  112. redshift.query(SQL`INSERT INTO messages (mess_uuid, content, received_at, resp_uuid, sessionid) VALUES (${mess_uuid},${content},${received_at},${resp_uuid},${session_uuid})`, {raw: true})
  113. .then(function(){
  114.  
  115. console.log( messages[message] );
  116.  
  117. })
  118. .catch(function(err){
  119. console.log(err);
  120. });
  121.  
  122. }
  123.  
  124. sessions_db.delete(session_uuid);
  125.  
  126. })
  127. .catch(function(err){
  128. console.log(err);
  129. });
  130.  
  131.  
  132. }
  133.  
  134.  
  135. }
  136.  
  137. // Push all old sessions
  138. });
  139.  
  140. /*
  141.  
  142. redshift.query(SQL`SELECT * FROM users WHERE user_uuid=${FB_user_id}`, {raw: true})
  143. .then(function(user) {
  144. // If users doesn't exist in DB
  145.  
  146. if (!user) {
  147. redshift.query(SQL`INSERT INTO users (user_uuid) VALUES (${FB_user_id})`, {raw: true})
  148. .then(function(){
  149. redshift.query(SQL`INSERT INTO sessions (sess_uuid, start_time) VALUES (${API_sess_uuid},${time_stamp})`, {raw: true})
  150. .then(function(){
  151. redshift.query(SQL`SELECT * FROM users WHERE user_uuid=${FB_user_id}`, {raw: true})
  152. .then(function(user){
  153. var userid = user[0].id;
  154. redshift.query(SQL`UPDATE sessions SET userid=${userid} WHERE sess_uuid=${API_sess_uuid}`, {raw: true})
  155. .then(function(){
  156. redshift.query(SQL`SELECT * FROM sessions WHERE userid=${userid}`, {raw: true})
  157. .then(function(session){
  158.  
  159.  
  160.  
  161.  
  162. }).catch(function(err){
  163. console.log(err);
  164. });
  165.  
  166. })
  167. .catch(function(err){
  168. console.log(err);
  169. });
  170. })
  171. .catch(function(err){
  172. console.log(err);
  173. });
  174. })
  175. .catch(function(err){
  176. console.log(err);
  177. });
  178. })
  179. .catch(function(err){
  180. console.log(err);
  181. });
  182. })
  183. .catch(function(err){
  184. console.log(err);
  185. });
  186. });
  187. }
  188. // If User already exists in DB:
  189. else {
  190.  
  191. var userid=user[0].id;
  192.  
  193. // Get past sessions from this user
  194. redshift.query(SQL`SELECT * FROM sessions WHERE userid = ${userid} ORDER BY id DESC;`, {raw: true})
  195. .then(function(session){
  196.  
  197.  
  198. var last_session = session[0].sess_uuid; //Get last_session ID from DB
  199.  
  200. // If user is still in the same session
  201. if (last_session === API_sess_uuid) {
  202.  
  203.  
  204. }
  205.  
  206. // If new session started
  207. else {
  208.  
  209. redshift.query(SQL`INSERT INTO sessions (sess_uuid, start_time, userid) VALUES (${API_sess_uuid},${time_stamp}, ${userid})`, {raw: true})
  210. .then(function(){
  211.  
  212. var current_node = null; // Convert current_node string to Int
  213. var current_node_childs = null; // Get current node childs
  214.  
  215. Promise.resolve(node_search(dialog, current_node, current_node_childs, message)).then(function(found_node){
  216. console.log('input context : '+ found_node.input_context);
  217. fb_send(bot, message, found_node.output);
  218. }).catch(function(err){
  219. console.log(err);
  220. });
  221.  
  222. })
  223. .catch(function(err){
  224. console.log(err);
  225. });
  226. };
  227. })
  228. .catch(function(err){
  229. console.log(err);
  230. });
  231. }
  232. })
  233. .catch(function(err){
  234. console.log(err);
  235. });
  236. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement