nyx_server
Version:
Node内容发布
191 lines (169 loc) • 6.29 kB
JavaScript
/* global global */
var _ = require('lodash');
var Promise = require("bluebird");
var templateCache = {};
var config = require("../config/default-config");
var DBTemplate = require("../db/DBTemplate");
var dbtemplate = new DBTemplate(config.NYX_DB_CONFIG_NAME);
function ProjectNodeDataFactory(data){
return new function(){
var projectInfos = []; //数据类型
this.getData = function(){
return projectInfos;
};
this.addData = function(data){
var has = false;
for(var i=0; i<projectInfos.length; i++){
if(projectInfos[i].name == data.name){
projectInfos[i].repo = data.repo;
has = true;
break;
}
}
if(!has){
projectInfos.push(data);
}
};
this.addData(data);
};
}
var projectInfoStore = new (require("./utils/TreeStore"))(ProjectNodeDataFactory);
var chipInfoStore = {};
var projectStore = {}; //项目存储
/**
* 装载数据库中的模板数据
*/
var templateCachePromise;
function loadTemplates(){
if(!templateCachePromise){
templateCachePromise = dbtemplate.query('SELECT path , repo , project FROM nxy.template_info_t group by path , repo , project', null)
.map(function(result){
//处理返回的数据
var project_name = result.project;
var path = result.path;
var repo = result.repo;
projectInfoStore.addNode(path , {'name' : project_name , repo:repo});
});
}
return templateCachePromise;
}
module.exports.loadTemplates = loadTemplates;
var project_max_time = 0;
/**
* 装载所有项目
*/
var projectCachePromise = null;
function loadProjects(){
if(!projectCachePromise){
projectCachePromise = dbtemplate.query('SELECT name , repo , descr , version , UNIX_TIMESTAMP(modify_time) modify_time1 FROM project_info_t', null)
.map(function(result){
//处理返回的数据
var name = result.name;
var repo = result.repo;
var version = result.version;
var descr = result.descr;
projectStore[name] = {'name' : name , 'gitRepo':repo , 'version':version , 'descr':descr};
project_max_time = result.modify_time1 > project_max_time ? result.modify_time1 : project_max_time; //最大修改时间
});
}
return projectCachePromise;
}
module.exports.loadProjects = loadProjects;
function getProjects () {
return loadProjects().then(function () {
return projectStore;
});
}
module.exports.getProjects = getProjects;
var chipCachePromise = null;
function loadChips(){
if(!chipCachePromise){
chipCachePromise = dbtemplate.query('SELECT name , project , descr FROM chip_info_t', null)
.map(function(result){
//处理返回的数据
var name = result.name;
var project = result.project;
var descr = result.descr;
chipInfoStore[project+'_'+name] = {'name' : name , 'project':project , 'descr':descr};
});
}
return chipCachePromise;
};
module.exports.loadChips = loadChips;
/**
* 按照路径匹配出符合的模板
* @param {string}matchPath 待匹配的路径
* @return 返回匹配的项目信息列表
*/
function findMatchProjects(matchPath){
return loadTemplates().then(function(){
var r = projectInfoStore.matchPath(matchPath);
if(r){
return r.getData();
}
return [];
});
};
module.exports.findMatchProjects = findMatchProjects;
function findProject(projectName){
return loadProjects().then(function(){
return projectStore[projectName];
});
};
module.exports.findProject = findProject;
/**
* 返回碎片信息
*/
function findChip(project , chipName){
return loadChips().then(function(){
return chipInfoStore[project+"_"+chipName];
});
};
module.exports.findChip = findChip;
function start(){
function monitor(){
loadProjects().then(function(){
return dbtemplate.query('SELECT name , repo , descr , version , UNIX_TIMESTAMP(modify_time) modify_time1 FROM project_info_t where UNIX_TIMESTAMP(modify_time)>?',[project_max_time]);
}).map(function(result){
console.log("有已更新项目,重新装载" , result);
var name = result.name;
var repo = result.repo;
var version = result.version;
var descr = result.descr;
projectStore[name] = {'name' : name , 'gitRepo':repo , 'version':version , 'descr':descr};
project_max_time = result.modify_time1 > project_max_time ? (result.modify_time1)+100 : project_max_time; //最大修改时间
return result;
}).map(function(result){
var projectName = result.name;
return dbtemplate.query('SELECT path , repo , project FROM template_info_t where project=? group by path , repo , project ', projectName)
.map(function(result){
//处理返回的数据
var project_name = result.project;
var path = result.path;
var repo = result.repo;
projectInfoStore.addNode(path , {'name' : project_name , repo:repo});
return result;
});
}).map(function(result){
var project_name = result.project;
return dbtemplate.query('SELECT name , project , descr FROM chip_info_t where project=?', [project_name])
.map(function(result){
//处理返回的数据
var name = result.name;
var project = result.project;
var descr = result.descr;
chipInfoStore[project+'_'+name] = {'name' : name , 'project':project , 'descr':descr};
});
}).catch(function(err){
console.log(new Date());
console.log(err.stack);
}).finally(function(){
setTimeout(monitor , 5000);
});
}
monitor();
}
loadTemplates();
loadProjects();
loadChips();
start();