Commit c23a91d3 authored by 刘松's avatar 刘松

update

parent 723579fc
......@@ -13,6 +13,7 @@ const session = require('cookie-session');
const mongoose = require('mongoose');
const sessions = require('./db/mongo/session');
const cron = require('./lib/cron');
const cron_gather = require('./lib/cron_gather');
const options = {
useMongoClient: true
......@@ -52,3 +53,4 @@ app.listen(config.port);
console.log('server started on port ' + config.port);
cron.start();
//cron_gather.start();
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -13,7 +13,7 @@ class Schedule extends React.Component{
constructor(props){
super(props);
console.dir(this.props);
this.state= { schedules :[],status:'pending',pagination:{current:1,pageSize:10,total:100},modalVisible:false,username:'channel'};
this.state= { schedules :[],status:'pending',pagination:{current:1,pageSize:10,total:1},modalVisible:false,username:'channel'};
}
componentDidMount(){
let pagination = this.state.pagination;
......@@ -31,7 +31,7 @@ class Schedule extends React.Component{
console.dir(pagination);
this.setState({status:'pending'})
api('GET', 'schedules?'+'skip='+ (pagination.current-1) + '&limit=' + pagination.pageSize).then((res) => {
this.setState({schedules:res.result,status:'ready'})
this.setState({schedules:res.result,status:'ready',pagination:{current:res.pagination.skip,pageSize:res.pagination.limit,total:res.pagination.total}})
console.dir(res.result);
});
}
......@@ -124,10 +124,10 @@ class Schedule extends React.Component{
});
data.push({
key:i,
id:schedules[i]._id,
id:(schedules[i].qd && schedules[i].qd['_id']) || '--',
names:names || '--',
status:schedules[i].status == 'use' ? '进行中' : '已暂停',
qd:schedules[i].qd && schedules[i].qd['user'] || '--',
qd:(schedules[i].qd && schedules[i].qd['user']) || '--',
times:schedules[i].times,
create:schedules[i].createdAt
});
......
......@@ -13,7 +13,7 @@ class Agent extends React.Component{
constructor(props){
super(props);
console.dir(this.props);
this.state= { links :[],status:'pending',pagination:{current:1,pageSize:10,total:100},modalVisible:false,username:'channel'};
this.state= { links :[],status:'pending',pagination:{current:1,pageSize:10,total:1},modalVisible:false,username:'channel'};
}
componentDidMount(){
let pagination = this.state.pagination;
......@@ -31,7 +31,7 @@ class Agent extends React.Component{
console.dir(pagination);
this.setState({status:'pending'})
api('GET', 'links?'+'skip='+ (pagination.current-1) + '&limit=' + pagination.pageSize).then((res) => {
this.setState({links:res.result,status:'ready'})
this.setState({links:res.result,status:'ready',pagination:{current:res.pagination.skip,pageSize:res.pagination.limit,total:res.pagination.total}})
console.dir(res.result);
});
}
......
......@@ -30,7 +30,7 @@ class Tbkls extends React.Component{
console.dir(pagination);
this.setState({status:'pending'})
api('GET', 'tbkls?'+'skip='+ (pagination.current-1) + '&limit=' + pagination.pageSize).then((res) => {
this.setState({tbkls:res.result,status:'ready'})
this.setState({tbkls:res.result,status:'ready',pagination:{current:res.pagination.skip,pageSize:res.pagination.limit,total:res.pagination.total}})
console.dir(res.result);
});
}
......
......@@ -14,7 +14,7 @@ class DashBoard extends React.Component{
constructor(props){
super(props);
this.range = [moment().subtract(6,'days').format('YYYYMMDD'), moment().format('YYYYMMDD')];
this.state= { logs :[],status:'pending',pagination:{current:1,pageSize:10,total:100} };
this.state= { logs :[],status:'pending',pagination:{current:1,pageSize:100,total:1} };
}
componentDidMount(){
let pagination = this.state.pagination;
......@@ -26,9 +26,10 @@ class DashBoard extends React.Component{
}
getlogs(pagination){
this.setState({status:'pending'})
this.setState({status:'pending'})
api('GET', 'logs?'+'skip='+ (pagination.current-1) + '&limit=' + pagination.pageSize).then((res) => {
this.setState({tbkls:res.result,status:'ready'})
this.setState({logs:res.result,status:'ready',pagination:{current:res.pagination.skip,pageSize:res.pagination.limit,total:res.pagination.total}})
console.dir(res.result);
});
}
......
module.exports = {
host: '0.0.0.0',
port: process.env.PORT ? process.env.PORT : 9401,
//mongo:'mongodb://user:password@10.11.3.100:1302/taoarticle',
mongo:'mongodb://127.0.0.1:27017/taoarticle',
taobao: {
host:"http://gw.api.taobao.com/router/rest",
......
const mongoose = require('mongoose');
const {ObjectId} = mongoose.SchemaTypes;
const schema = mongoose.Schema({
date: {
type: Date,
required: true
},
schedule:{
type:ObjectId,
required: true,
ref:'tao-schedule'
},
times:{
type:Number,
required: true
}
}, {
timestamps: true
});
schema.index({date: 1});
schema.index({schedule: 1});
schema.index({date: 1,schedule: 1});
module.exports = mongoose.model('tao-data', schema);
......@@ -20,5 +20,5 @@ const schema = mongoose.Schema({
timestamps: true
});
schema.index({info: 1});
schema.index({qd: 1});
module.exports = mongoose.model('tao-schedule', schema);
......@@ -13,7 +13,6 @@ const not_full = 'params not full error';
const not_right = 'params not right error';
function dateFormat(target,format) {
console.dir(target.getTime());
return moment(new Date(target.getTime()),'x').format(format || 'YYYYMMDD HH:mm:ss');
};
......@@ -64,16 +63,30 @@ exports.logs = async (req, res, next) => {
const condition = {'$and': [{'createdAt': {'$gte': moment(start, 'YYYYMMDD').startOf('day').toDate()}}, {'createdAt': {'$lt': moment(end, 'YYYYMMDD').endOf('day').toDate()}}]};
let {limit = 100,skip = 0,sort = {'updatedAt': -1}} = req.query;
let options = {limit:parseInt(limit),skip:parseInt(skip)*limit,sort};
console.dir(options);
var logs = await Log.find({},null,options).populate({path:"schedule",select:"links qd",populate:{path:'qd',select:'user'}});
let total = await Log.count({},null);
logs = logs.map(x => { var d = x.toJSON();d['updatedAt'] = dateFormat(d['updatedAt']);return d;});
res.send({ status:'ok',result:logs,pagination:{total:total,skip:skip,limit:limit}});
}
exports.getGatherData = async (req, res, next) => {
let {limit = 100,skip = 0,sort = {'updatedAt': -1}} = req.query;
let options = {limit:parseInt(limit),skip:parseInt(skip)*limit,sort};
var logs = await Log.find({},null,options).populate({path:"schedule",select:"links qd",populate:{path:'qd',select:'user'}});
let total = await Log.count({},null);
logs = logs.map(x => { var d = x.toJSON();d['updatedAt'] = dateFormat(d['updatedAt']);return d;});
res.send({ status:'ok',result:logs,pagination:{total:total,skip:skip,limit:limit}});
}
exports.getTbkls = async (req, res, next) => {
let {limit = 100,skip = 0,sort = {'updatedAt': -1}} = req.query;
let options = {limit:parseInt(limit),skip:parseInt(skip)*limit,sort};
let tbkls = await Kouling.find({},null,options).populate('link','title target');
tbkls = tbkls.map(x => { var d = x.toJSON();d['createdAt'] = dateFormat(d['createdAt']);return d;});
let total = await Kouling.count({},null);
res.send({ status:'ok',result:tbkls,pagination:{total:total,skip:skip,limit:limit}});
}
......@@ -81,9 +94,10 @@ exports.getTbkls = async (req, res, next) => {
exports.getLinks = async (req, res, next) => {
let {limit = 100,skip = 0,sort = {'updatedAt': -1}} = req.query;
let options = {limit:parseInt(limit),skip:parseInt(skip)*limit,sort};
let tbkls = await Link.find({},null,options).populate('qd','user role');
let links = await Link.find({},null,options).populate('qd','user role');
links = links.map(x => { var d = x.toJSON();d['createdAt'] = dateFormat(d['createdAt']);return d;})
let total = await Link.count({},null);
res.send({ status:'ok',result:tbkls,pagination:{total:total,skip:skip,limit:limit}});
res.send({ status:'ok',result:links,pagination:{total:total,skip:skip,limit:limit}});
}
exports.createLink = async (req, res, next) => {
......@@ -150,6 +164,7 @@ exports.createSchedule = async (req, res, next) => {
arr.forEach(async item => {
item['link'] = item._id;
item['schedule'] = schedule;
item['qd'] = item.qd;
for(let i = 0;i<5;i++){
tkl_Tasks.push(createTbkl(item));
}
......@@ -172,12 +187,12 @@ exports.createSchedule = async (req, res, next) => {
}
var createTbkl = async (data) => {
let {title,target,pic} = data;
let {title,target,pic,qd} = data;
return new Promise(async (r,d) => {
try {
let tbklInfo = await tao.createTbkl(title,target,pic);
let model = tbklInfo.model;
let _data = { info:model,schedule:data.schedule,link:data.link,status:'use' };
let _data = { info:model,schedule:data.schedule,link:data.link,creater:qd,status:'use' };
tao.saveKouling(_data,function(e,result){
if(e) d(e);
else r(result);
......
......@@ -7,7 +7,7 @@ const tao = require('./tao');
const _ = require('lodash');
const moment = require('moment');
const controller = require('./controller');
const max = 400000;
const max = 100000;
var CronJob = cron.CronJob;
var job = new CronJob({
cronTime: '0 */2 * * * *',
......@@ -48,6 +48,7 @@ async function tbklTask () {
let schedules = await Schedule.find({status:'use'}).limit(500);
schedules.forEach( async item => {
let schedule = item.toJSON()._id;
var qd = item.toJSON().qd;
// console.dir(schedule);
// 查询计划内 超过20000 请求 淘口令
//console.dir({times:{$gte:10},status:'use',schedule:schedule});
......@@ -66,6 +67,7 @@ async function tbklTask () {
schedule:item.schedule,
link:item.link,
status:'use',
creater:qd,
pic:item.link.pic
}
tasks_new.push(controller.createTbkl(data));
......
const cron = require('cron');
const nodemailer = require('nodemailer');
const Schedule = require('../db/mongo/tao-schedule');
const Data = require('../db/mongo/tao-data');
const Log = require('../db/mongo/tao-log');
const _ = require('lodash');
const moment = require('moment');
const controller = require('./controller');
const max = 400000;
var CronJob = cron.CronJob;
var job = new CronJob({
cronTime: '00 26 15 * * 0-6',
onTick: function() {
tbklTask();
},
start: false,
});
async function sendMail(email,body) {
var smtpTransport = nodemailer.createTransport({
auth: {
user: "liusong@goyoo.com",
pass: "323609zhang"
},
host: 'smtp.exmail.qq.com',
port: 465
});
var mailOptions = {
from: "liusong@goyoo.com",
to: email, //发给谁
subject: '淘口令后台定时任务错误', //主题
text: body
};
smtpTransport.sendMail(mailOptions, function (err, response) {
if (!err) {
console.log('发送邮件成功');
} else {
console.log('发送邮件失败,请重试');
}
});
}
async function tbklTask () {
console.log('定时更新开始 =====> ');
try {
var date = moment().add(-1,'days').format('YYYYMMDD');
var logDate = moment().add(-1,'days').toDate();
var list = await Log.aggregate([
{
$match:{
"date": date
}
},
{
$group:{
_id: "$schedule",
sum:{ $sum:"$times" }
}
}
]);
var tasks = [];
list.forEach( item => {
var data = new Data({schedule:item._id,date:logDate,times:item.sum});
tasks.push(data.save());
});
Promise.all(tasks).then(function(arr){
console.log('插入' + arr.length + '条数据');
});
} catch (err) {
console.dir(err);
console.dir('更新异常 =====>');
let mailList = 'liusong@goyoo.com';
sendMail(mailList, err.toString());
}
}
module.exports.start = function ()
{
job.start();
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment