Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require('dotenv').load();
- var Redshift = require('node-redshift');
- var SQL = require('sql-template-strings');
- var Store = require('jfs');
- var sessions_db = new Store('../botkit/lib/storage/sessions');
- var users_db = new Store('../botkit/lib/storage/users');
- var client = {
- user: process.env.Redshift_user,
- database: process.env.Redshift_database,
- password: process.env.Redshift_password,
- port: process.env.Redshift_port,
- host: process.env.Redshift_host
- };
- var redshift = new Redshift(client);
- if (!process.env.Redshift_user) {
- console.log('Error: Specify Redshift_user in environment');
- process.exit(1);
- }
- if (!process.env.Redshift_database) {
- console.log('Error: Specify Redshift_database in environment');
- process.exit(1);
- }
- if (!process.env.Redshift_password) {
- console.log('Error: Specify Redshift_password in environment');
- process.exit(1);
- }
- if (!process.env.Redshift_port) {
- console.log('Error: Specify Redshift_port in environment');
- process.exit(1);
- }
- if (!process.env.Redshift_host) {
- console.log('Error: Specify Redshift_host in environment');
- process.exit(1);
- }
- var schedule = require('node-schedule');
- var rule = new schedule.RecurrenceRule();
- rule.second = [0, 15, 30, 45];
- var j = schedule.scheduleJob(rule, function() {
- var sessions = sessions_db.allSync();
- var users = users_db.allSync();
- var sessions_list = Object.keys(sessions);
- var users_list = Object.keys(users);
- var last_sessionIds = [];
- // Collect the ID of the last sessions of every user :
- for (var user in users) {
- var userInfo = users[user];
- var last_sessionId = userInfo.last_session;
- // Construct an array with all the last sessions :
- last_sessionIds = last_sessionIds.concat(last_sessionId);
- };
- // For each session id in the current local DB :
- for (var sessionid in sessions_list) {
- console.log(sessionid);
- var add_it = true;
- // Check if session id is part of the last session :
- for(var i = 0 ; i < last_sessionIds.length; i++){
- if ( sessions_list[sessionid] == last_sessionIds[i]){
- add_it = false;
- break;
- }
- }
- // If the session is not in the last session, then push it to Redshift
- if (add_it) {
- var session_uuid = sessions_list[sessionid];
- console.log(session_uuid);
- var start_time = sessions[sessions_list[sessionid]].start_time;
- var user_uuid = sessions[sessions_list[sessionid]].userid;
- var messages = sessions[sessions_list[sessionid]].messages;
- //ADD redshift push
- redshift.query(SQL`INSERT INTO sessions (id, start_time, userid) VALUES (${session_uuid},${start_time}, ${user_uuid})`, {raw: true})
- .then(function(){
- for ( message in messages ) {
- var mess_uuid = messages[message].mess_uuid;
- var content = messages[message].content;
- var received_at = messages[message].received_at;
- var intent = messages[message].intent;
- var entity = messages[message].entity;
- var resp_uuid = messages[message].resp_uuid;
- 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})
- .then(function(){
- console.log( messages[message] );
- })
- .catch(function(err){
- console.log(err);
- });
- }
- sessions_db.delete(session_uuid);
- })
- .catch(function(err){
- console.log(err);
- });
- }
- }
- // Push all old sessions
- });
- /*
- redshift.query(SQL`SELECT * FROM users WHERE user_uuid=${FB_user_id}`, {raw: true})
- .then(function(user) {
- // If users doesn't exist in DB
- if (!user) {
- redshift.query(SQL`INSERT INTO users (user_uuid) VALUES (${FB_user_id})`, {raw: true})
- .then(function(){
- redshift.query(SQL`INSERT INTO sessions (sess_uuid, start_time) VALUES (${API_sess_uuid},${time_stamp})`, {raw: true})
- .then(function(){
- redshift.query(SQL`SELECT * FROM users WHERE user_uuid=${FB_user_id}`, {raw: true})
- .then(function(user){
- var userid = user[0].id;
- redshift.query(SQL`UPDATE sessions SET userid=${userid} WHERE sess_uuid=${API_sess_uuid}`, {raw: true})
- .then(function(){
- redshift.query(SQL`SELECT * FROM sessions WHERE userid=${userid}`, {raw: true})
- .then(function(session){
- }).catch(function(err){
- console.log(err);
- });
- })
- .catch(function(err){
- console.log(err);
- });
- })
- .catch(function(err){
- console.log(err);
- });
- })
- .catch(function(err){
- console.log(err);
- });
- })
- .catch(function(err){
- console.log(err);
- });
- })
- .catch(function(err){
- console.log(err);
- });
- });
- }
- // If User already exists in DB:
- else {
- var userid=user[0].id;
- // Get past sessions from this user
- redshift.query(SQL`SELECT * FROM sessions WHERE userid = ${userid} ORDER BY id DESC;`, {raw: true})
- .then(function(session){
- var last_session = session[0].sess_uuid; //Get last_session ID from DB
- // If user is still in the same session
- if (last_session === API_sess_uuid) {
- }
- // If new session started
- else {
- redshift.query(SQL`INSERT INTO sessions (sess_uuid, start_time, userid) VALUES (${API_sess_uuid},${time_stamp}, ${userid})`, {raw: true})
- .then(function(){
- var current_node = null; // Convert current_node string to Int
- var current_node_childs = null; // Get current node childs
- Promise.resolve(node_search(dialog, current_node, current_node_childs, message)).then(function(found_node){
- console.log('input context : '+ found_node.input_context);
- fb_send(bot, message, found_node.output);
- }).catch(function(err){
- console.log(err);
- });
- })
- .catch(function(err){
- console.log(err);
- });
- };
- })
- .catch(function(err){
- console.log(err);
- });
- }
- })
- .catch(function(err){
- console.log(err);
- });
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement