Pārlūkot izejas kodu

登录时长统计

zhangweicheng 6 gadi atpakaļ
vecāks
revīzija
64b6144c81
3 mainītis faili ar 57 papildinājumiem un 1 dzēšanām
  1. 36 0
      logs/online_logs.js
  2. 17 0
      modules/all_models/online_logs.js
  3. 4 1
      server.js

+ 36 - 0
logs/online_logs.js

@@ -0,0 +1,36 @@
+/**
+ * Created by zhang on 2019/4/12.
+ */
+module.exports = {
+    saveOnlineTime:saveOnlineTime
+};
+
+let mongoose = require("mongoose");
+import moment from "moment";
+let logs_model = mongoose.model("online_logs");
+
+async function saveOnlineTime(req) {
+    let interval_time = 10 * 60 *1000;
+    let start = req.session.online_start_time;
+    let end = + new Date();
+    let online_times =  end - start;
+    //1秒内只记一次就好
+    if(online_times < 500) return;//如果间隔太短,则忽略
+    if(online_times > interval_time ){//如果间隔超过有效时长,则不累加这次时长,从头开始算
+        req.session.online_start_time = end;
+        return
+    }
+    if(!req.session.sessionUser||!req.session.sessionCompilation) return;
+    let dataString = moment(end).format('YYYY-MM-DD');
+    let condition = {userID:req.session.sessionUser.id,compilationID:req.session.sessionCompilation._id,dateString:dataString};
+    let record = await logs_model.findOne(condition);
+    if(record){ //如果找到,则累加
+        await logs_model.update(condition,{$inc:{'online_times' : online_times }});
+    }else {//如果没找到,则新增一条记录
+        condition["online_times"] = online_times;
+        let today = moment(dataString).toDate();
+        condition["dateTime"] = +today;
+        await logs_model.create(condition);
+    }
+    req.session.online_start_time = end;
+}

+ 17 - 0
modules/all_models/online_logs.js

@@ -0,0 +1,17 @@
+/**
+ * Created by zhang on 2019/4/12.
+ */
+//用户在线时长统计
+
+let mongoose = require("mongoose");
+let Schema = mongoose.Schema;
+
+// 表结构
+let schema = {
+    userID: String,
+    compilationID: String,
+    dateString: String,
+    dateTime:Number,//dateString转换回毫秒数对应的数值,方便查询
+    online_times: Number
+};
+mongoose.model("online_logs", new Schema(schema, {versionKey: false}),"online_logs");

+ 4 - 1
server.js

@@ -23,6 +23,8 @@ fileUtils.getGlobbedFiles('./modules/all_models/*.js').forEach(function(modelPat
 //config.setupCache();
 let cfgCacheUtil = require("./config/cacheCfg");
 cfgCacheUtil.setupDftCache();
+let online_logs = require("./logs/online_logs");
+
 
 let app = express();
 let _rootDir = __dirname;
@@ -54,7 +56,7 @@ app.use(session({
 }));
 
 // 登录状态全局判断
-app.use(function (req, res, next) {
+app.use(async function (req, res, next) {
     let url = req.originalUrl;
     // if (/^\/login/.test(url) || /\.map|\.ico$/.test(url) || /^\/sms/.test(url) || /^\/cld/.test(url) || /^\/captcha/.test(url)  || /^\/accountIsPro/.test(url)) {
     if (/^\/login/.test(url) || /\.map|\.ico$/.test(url) || /^\/sms/.test(url) || /^\/cld/.test(url) || /^\/captcha/.test(url)) {
@@ -87,6 +89,7 @@ app.use(function (req, res, next) {
             return res.redirect('/login');
         }
         next();
+        await online_logs.saveOnlineTime(req);//记录登录时长
     }
 });