diff --git a/MongDBTool.bat b/MongDBTool.bat new file mode 100644 index 0000000..83796fd --- /dev/null +++ b/MongDBTool.bat @@ -0,0 +1,3 @@ +set PYTHONPATH=.;%CD% + +python .\mongodb\dbtool.py -l cloudsoar namespaces.js diff --git a/MongDBTool.sh b/MongDBTool.sh index 6248e76..fd94d4d 100644 --- a/MongDBTool.sh +++ b/MongDBTool.sh @@ -4,7 +4,7 @@ export PYTHONPATH=`pwd` if [[ "$1" = "" || "$1" = "-h" ]]; then - python mongodb/mongodbtool.py -h 2>&1 + python mongodb/dbtool.py -h 2>&1 else - python mongodb/mongodbtool.py -l $1 $2 2>&1 + python mongodb/dbtool.py -l $1 $2 2>&1 fi diff --git a/api/accountmgr.py b/api/accountmgr.py index 526c326..89ebc25 100644 --- a/api/accountmgr.py +++ b/api/accountmgr.py @@ -96,9 +96,13 @@ def save_account(self, post_data): return UserDBImpl.instance().create_new_user(account) @ring8 - def grp(self, namespace): + def groups(self, namespace): return GroupDBImpl.instance().read_record_list({'namespace':namespace}) + @ring8 + def group(self, group_id): + return GroupDBImpl.instance().read_record({ID:group_id}) + @ring8 def is_group_exist(self, namespace, group_name): namespace = namespace.strip() @@ -110,7 +114,7 @@ def is_group_exist(self, namespace, group_name): return GroupDBImpl.instance().is_exist({'namespace':namespace,'group_name':group_name}) @ring8 - def save_grp(self, post_data): + def save_group(self, post_data): try: group_info = json.loads(post_data.replace("'", '"')) except Exception,e: @@ -120,7 +124,7 @@ def save_grp(self, post_data): return GroupDBImpl.instance().create_new_group(group_info) @ring8 - def delete_grp(self, group_id=''): + def delete_group(self, group_id=''): group_id = group_id.strip() if group_id=='': return Result('', INVALID_PARAM_ERR, 'Invalid group id' ) diff --git a/api/registrymgr.py b/api/registrymgr.py index ffdd943..d483f41 100644 --- a/api/registrymgr.py +++ b/api/registrymgr.py @@ -8,7 +8,7 @@ from common.util import Result from frame.Logger import Log from frame.authen import ring8 -from frame.errcode import INVALID_JSON_DATA_ERR +from frame.errcode import INVALID_JSON_DATA_ERR, INVALID_PARAM_ERR from mongoimpl.registry.namespacedbimpl import NamespaceDBImpl from mongoimpl.registry.repositorydbimpl import RepositoryDBImpl from mongoimpl.registry.tagdbimpl import TagDBImpl @@ -48,11 +48,38 @@ def info(self): @ring8 def namespaces(self): - return NamespaceDBImpl.instance().read_record_list() + query = {} + rlt = NamespaceDBImpl.instance().exec_db_script('namespaces',query, 10, 0) + if not rlt.success: + Log(1, 'namespaces.read_record_list fail,as[%s]'%(rlt.message)) + + return rlt + @ring8 + def save_namespace(self, post_data): + try: + namespace = json.loads(post_data.replace("'", '"')) + except Exception,e: + Log(1,"save_account.parse data to json fail,input[%s]"%(post_data)) + return Result('',INVALID_JSON_DATA_ERR,str(e)) + else: + return NamespaceDBImpl.instance().create_new_nspc(namespace) + @ring8 def namespace(self, namespace): - return NamespaceDBImpl.instance().read_record(namespace) + NamespaceDBImpl.instance().read_record(namespace) + + @ring8 + def delete_namespace(self, namespace=''): + namespace = namespace.strip() + if namespace=='': + return Result('', INVALID_PARAM_ERR, 'Invalid namespace' ) + + rlt = NamespaceDBImpl.instance().delete_namespace(namespace) + if not rlt.success: + Log(1, 'delete_namespace[%s] fail,as[%s]'%(namespace, rlt.message)) + return rlt + @ring8 def repository(self, namespace, repo_name=''): @@ -77,15 +104,7 @@ def tag(self, namespace, repo_name, tag_name=''): return TagDBImpl.instance().get_tag_info(namespace, tag_name) - @ring8 - def save_namespace(self, post_data): - try: - namespace = json.loads(post_data.replace("'", '"')) - except Exception,e: - Log(1,"save_account.parse data to json fail,input[%s]"%(post_data)) - return Result('',INVALID_JSON_DATA_ERR,str(e)) - else: - return NamespaceDBImpl.instance().create_new_nspc(namespace) + diff --git a/frame/apiresource.py b/frame/apiresource.py index 179837d..b169879 100644 --- a/frame/apiresource.py +++ b/frame/apiresource.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Copyright (c) 20016-2016 The Cloudsoar. # See LICENSE for details. @@ -115,6 +116,7 @@ def _cbRender(self, result, request, responseFailed=None): try: content = json.dumps(ret) request.setHeader("content-length", str(len(content))) + request.setHeader("Access-Control-Allow-Origin", "*") request.write(content) except Exception, e: SysLog(1,"TestResource._cbRender fail [%s]"%str(e)) diff --git a/mongodb/dbmgr.py b/mongodb/dbmgr.py index 86f8cdb..b2ed884 100644 --- a/mongodb/dbmgr.py +++ b/mongodb/dbmgr.py @@ -12,8 +12,8 @@ import threading import time -from pymongo.connection import Connection from pymongo.errors import AutoReconnect +from pymongo.mongo_client import MongoClient from common.guard import LockGuard from frame.Logger import Log, PrintStack @@ -56,7 +56,7 @@ def __init__(self,db_host=None,db_port=None): self.host = db_host or GetSysConfig("db_host") self.osname = None try: - self.conn = Connection(self.host, self.port) + self.conn = MongoClient(self.host, self.port) except Exception,e: PrintStack() Log(1,"VFOSDBMgr connect to Mongdb fail,as[%s]"%(str(e))) @@ -64,7 +64,7 @@ def __init__(self,db_host=None,db_port=None): Log(3,"Connect to db success.") def autoConnect(self): - self.conn = Connection(self.host, self.port) + self.conn = MongoClient(self.host, self.port) def init_db_config(self): if self.osname : @@ -154,7 +154,7 @@ def isDBRuning(self): ''' try: if self.conn is None: - self.conn = Connection(self.host, self.port) + self.conn = MongoClient(self.host, self.port) self.conn.server_info() except Exception,e: Log(1,"Get mongodb server info fail,as[%s]"%(str(e))) diff --git a/mongodb/dbtool.py b/mongodb/dbtool.py index 4140b3b..aeec368 100644 --- a/mongodb/dbtool.py +++ b/mongodb/dbtool.py @@ -80,5 +80,4 @@ def usage(): if __name__ == "__main__": - #main() - LoadJS('cloudsoar', 'repositories.js') \ No newline at end of file + main() \ No newline at end of file diff --git a/mongodb/javascript/cloudsoar/namespaces.js b/mongodb/javascript/cloudsoar/namespaces.js new file mode 100644 index 0000000..6af8d2d --- /dev/null +++ b/mongodb/javascript/cloudsoar/namespaces.js @@ -0,0 +1,10 @@ +namespaces = function (query, size, skip) { + var data = []; + var cor = db.Namespace.find(query).limit(size).skip(skip); + cor.forEach(function(nspc){ + nspc['repo_num'] = db.Repository.count({'namespace':nspc._id}); + data.push(nspc); + }); + + return {"result":0, "content":data}; +} diff --git a/mongodb/javascript/cloudsoar/repositories.js b/mongodb/javascript/cloudsoar/repositories.js new file mode 100644 index 0000000..bce9395 --- /dev/null +++ b/mongodb/javascript/cloudsoar/repositories.js @@ -0,0 +1,40 @@ +repositories = function (query, size, skip) { + + var extent = function(srcObj, tarObj){ + for(var p in srcObj){ + if(typeof(srcObj[p])=="function"){ + continue; + } + else{ + tarObj[p] = srcObj[p]; + } + } + return tarObj; + } + + var GetTags = function(repo_id){ + + arr = [] + var corsur = db.Tags.find({'repository':repo_id}) + corsur.forEach(function(tag){ + image = db.Image.findOne({"_id":tag.digest}); + if (image) + { + tag['size'] = image['size']; + tag['user_id'] = image['user_id']; + tag['pull_num'] = image['pull_num']; + } + arr.push(tag); + }); + return arr; + } + + var data = []; + var cor = db.Repository.find(query).limit(size).skip(skip); + cor.forEach(function(repo){ + repo['tags'] = GetTags(repo._id); + data.push(repo); + }); + + return {"result":0, "content":data}; +} diff --git a/mongoimpl/registry/namespacedbimpl.py b/mongoimpl/registry/namespacedbimpl.py index ce35279..12e4503 100644 --- a/mongoimpl/registry/namespacedbimpl.py +++ b/mongoimpl/registry/namespacedbimpl.py @@ -61,7 +61,8 @@ def create_new_nspc(self, info): return rlt - + def delete_namespace(self, namespace): + return self.remove({ID:namespace}) diff --git a/start.bat b/start.bat index fa9fff2..59cdff0 100644 --- a/start.bat +++ b/start.bat @@ -1,7 +1,7 @@ @echo off -set PYTHONPATH=".:%CD%" +set PYTHONPATH=".;%CD%" start /b python ServerMain.py