UNPKG

nyx_server

Version:

Node内容发布

191 lines (169 loc) 6.29 kB
/* 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();