Skip to content

Commit e6b8d07

Browse files
author
pobu168
committed
Merge branch 'dev_search_upgrade' into dev
2 parents c214d39 + d38e1a0 commit e6b8d07

File tree

12 files changed

+358
-315
lines changed

12 files changed

+358
-315
lines changed

artifacts-corepy/artifacts_corepy/apps/package/apiv2.py

Lines changed: 70 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from __future__ import absolute_import
44

5+
import copy
56
import datetime
67
import hashlib
78
import fnmatch
@@ -189,6 +190,13 @@ def list_by_post(self, query):
189190
pass
190191

191192

193+
class User(WeCubeResource):
194+
def list(self, params):
195+
api_client = self.get_cmdb_client()
196+
url = self.server + '/platform/v1/users/retrieve'
197+
resp_json = api_client.get(url, {}, check_resp=False)
198+
return resp_json.get('data', [])
199+
192200
class ProcessDef(WeCubeResource):
193201
def list(self, params):
194202
params['plugin'] = 'artifacts'
@@ -375,6 +383,24 @@ def list_by_post(self, query, unit_design_id):
375383
i[field] = self.build_file_object(i.get(field, None))
376384
return resp_json['data']
377385

386+
def get_package_statistics(self, post_data, unit_design_id):
387+
cmdb_client = self.get_cmdb_client()
388+
result = {}
389+
post_data = post_data or {}
390+
query = post_data
391+
query.setdefault('dialect', {"queryMode": "new"})
392+
query.setdefault('filters', [])
393+
query.setdefault('paging', True)
394+
query.setdefault('pageable', {'pageSize':1, 'startIndex': 1})
395+
self.set_package_query_fields(query)
396+
query['filters'].append({"name": "unit_design", "operator": "eq", "value": unit_design_id})
397+
for t in [constant.PackageType.app, constant.PackageType.db, constant.PackageType.mixed, constant.PackageType.image, constant.PackageType.rule]:
398+
query_tmp = copy.deepcopy(query)
399+
query_tmp['filters'].append({"name": field_pkg_package_type_name, "operator": "eq", "value": t})
400+
resp_json = cmdb_client.retrieve(CONF.wecube.wecmdb.citypes.deploy_package, query_tmp)
401+
result[t] = resp_json['data']['pageInfo']['totalRows']
402+
return result
403+
378404
def build_file_object(self, filenames, spliter=None):
379405
if spliter is None:
380406
spliter = r'[|,]'
@@ -773,7 +799,9 @@ def _pack_compose_package(self, pack_filepath, deploy_package_id:str):
773799
tar.add(package_path_db_diffconfigs, arcname=os.path.basename(package_path_db_diffconfigs))
774800
return output_filename
775801

776-
def upload(self, filename, filetype, fileobj, baseline_package, unit_design_id):
802+
def upload(self, filename, filetype, fileobj, baseline_package, package_type, unit_design_id):
803+
if not package_type:
804+
package_type = constant.PackageType.default
777805
if not is_upload_local_enabled():
778806
raise exceptions.PluginError(message=_("Package uploading is disabled!"))
779807
if self._is_compose_package(filename):
@@ -803,7 +831,8 @@ def upload(self, filename, filetype, fileobj, baseline_package, unit_design_id):
803831
field_pkg_is_decompression_name: field_pkg_is_decompression_default_value,
804832
'upload_user': scoped_globals.GLOBALS.request.auth_user,
805833
'upload_time': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
806-
'unit_design': unit_design_id
834+
'unit_design': unit_design_id,
835+
field_pkg_package_type_name: package_type
807836
}]
808837
exist_package = self._get_deploy_package_by_name_unit(filename,unit_design_id)
809838
if exist_package is None:
@@ -812,13 +841,17 @@ def upload(self, filename, filetype, fileobj, baseline_package, unit_design_id):
812841
package_rows[0]['guid'] = exist_package['guid']
813842
package_result = self.pure_update(package_rows)
814843
new_package_guid = package_result['data'][0]['guid']
815-
new_deploy_attrs = self._analyze_package_attrs(new_package_guid, baseline_package, {})
844+
new_deploy_attrs = self._analyze_package_attrs(new_package_guid, baseline_package, {
845+
field_pkg_package_type_name: package_type
846+
})
816847
# update 属性
817848
new_deploy_attrs['guid'] = new_package_guid
818849
self.pure_update([new_deploy_attrs])
819850
return [self._get_deploy_package_by_id(new_package_guid)]
820851

821-
def upload_from_nexus(self, download_url, baseline_package, unit_design_id):
852+
def upload_from_nexus(self, download_url, baseline_package, package_type, unit_design_id):
853+
if not package_type:
854+
package_type = constant.PackageType.default
822855
if not is_upload_nexus_enabled():
823856
raise exceptions.PluginError(message=_("Package uploading is disabled!"))
824857
url_info = self.download_url_parse(download_url)
@@ -876,7 +909,8 @@ def upload_from_nexus(self, download_url, baseline_package, unit_design_id):
876909
field_pkg_is_decompression_name: field_pkg_is_decompression_default_value,
877910
'upload_user': scoped_globals.GLOBALS.request.auth_user,
878911
'upload_time': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
879-
'unit_design': unit_design_id
912+
'unit_design': unit_design_id,
913+
field_pkg_package_type_name:package_type
880914
}]
881915
exist_package = self._get_deploy_package_by_name_unit(url_info['filename'],unit_design_id)
882916
if exist_package is None:
@@ -885,7 +919,9 @@ def upload_from_nexus(self, download_url, baseline_package, unit_design_id):
885919
package_rows[0]['guid'] = exist_package['guid']
886920
package_result = self.pure_update(package_rows)
887921
new_package_guid = package_result['data'][0]['guid']
888-
new_deploy_attrs = self._analyze_package_attrs(new_package_guid, baseline_package, {})
922+
new_deploy_attrs = self._analyze_package_attrs(new_package_guid, baseline_package, {
923+
field_pkg_package_type_name: package_type
924+
})
889925
# update 属性
890926
new_deploy_attrs['guid'] = new_package_guid
891927
self.pure_update([new_deploy_attrs])
@@ -927,7 +963,8 @@ def upload_from_nexus(self, download_url, baseline_package, unit_design_id):
927963
'upload_time':
928964
datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
929965
'unit_design':
930-
unit_design_id
966+
unit_design_id,
967+
field_pkg_package_type_name:package_type
931968
}]
932969
exist_package = self._get_deploy_package_by_name_unit(filename,unit_design_id)
933970
if exist_package is None:
@@ -936,7 +973,9 @@ def upload_from_nexus(self, download_url, baseline_package, unit_design_id):
936973
package_rows[0]['guid'] = exist_package['guid']
937974
package_result = self.pure_update(package_rows)
938975
new_package_guid = package_result['data'][0]['guid']
939-
new_deploy_attrs = self._analyze_package_attrs(new_package_guid, baseline_package, {})
976+
new_deploy_attrs = self._analyze_package_attrs(new_package_guid, baseline_package, {
977+
field_pkg_package_type_name: package_type
978+
})
940979
# update 属性
941980
new_deploy_attrs['guid'] = new_package_guid
942981
self.pure_update([new_deploy_attrs])
@@ -958,6 +997,11 @@ def _pop_none(d, k):
958997
rule='1, 36',
959998
rule_type='length',
960999
nullable=False),
1000+
crud.ColumnValidator('packageType',
1001+
validate_on=['update:O'],
1002+
rule='1, 36',
1003+
rule_type='length',
1004+
nullable=True),
9611005
]
9621006
clean_data = crud.ColumnValidator.get_clean_data(validates, data, 'update')
9631007
baseline_package_id = clean_data.get('baselinePackage')
@@ -966,7 +1010,7 @@ def _pop_none(d, k):
9661010
url = CONF.wecube.nexus.server.rstrip(
9671011
'/') + '/repository/' + CONF.wecube.nexus.repository + '/' + clean_data['nexusUrl'].lstrip('/')
9681012
unit_design_id = baseline_package['unit_design']['guid']
969-
new_pakcage = self.upload_from_nexus(url, baseline_package_id, unit_design_id)[0]
1013+
new_pakcage = self.upload_from_nexus(url, baseline_package_id, clean_data.get('packageType'), unit_design_id)[0]
9701014
return {'guid': new_pakcage['guid']}
9711015

9721016
def upload_and_create2(self, data):
@@ -1009,6 +1053,10 @@ def _pop_none(d, k):
10091053
rule=validator.LengthValidator(1, 255),
10101054
validate_on=['check:M'],
10111055
nullable=False),
1056+
crud.ColumnValidator(field='package_type',
1057+
rule=validator.LengthValidator(1, 255),
1058+
validate_on=['check:O'],
1059+
nullable=True),
10121060
]
10131061

10141062
result = {'resultCode': '0', 'resultMessage': 'success', 'results': {'outputs': []}}
@@ -1046,7 +1094,9 @@ def _pop_none(d, k):
10461094
unit_design = resp_json['data']['contents'][0]
10471095
if clean_data['package_guid']:
10481096
# 有package_guid,则更新
1049-
new_deploy_attrs = self._analyze_package_attrs(clean_data['package_guid'], clean_data['baseline_package_guid'], {})
1097+
new_deploy_attrs = self._analyze_package_attrs(clean_data['package_guid'], clean_data['baseline_package_guid'], {
1098+
field_pkg_package_type_name: clean_data.get('package_type')
1099+
})
10501100
# update 属性
10511101
new_deploy_attrs['guid'] = clean_data['package_guid']
10521102
self.pure_update([new_deploy_attrs])
@@ -1059,7 +1109,7 @@ def _pop_none(d, k):
10591109
r_artifact_path = group
10601110
download_url = CONF.wecube.nexus.server.rstrip(
10611111
'/') + '/repository/' + CONF.wecube.nexus.repository + r_artifact_path + clean_data['package_name']
1062-
self.upload_from_nexus(download_url, clean_data['baseline_package_guid'], clean_data['unit_design'])
1112+
self.upload_from_nexus(download_url, clean_data['baseline_package_guid'], clean_data.get('package_type'), clean_data['unit_design'])
10631113
result['results']['outputs'].append(single_result)
10641114
except Exception as e:
10651115
single_result['errorCode'] = '1'
@@ -2555,3 +2605,12 @@ def list_by_post(self, query):
25552605
result.append({"id": item, "displayName": item, "unit_design_id": unit_design_id})
25562606

25572607
return result
2608+
2609+
class CiData(WeCubeResource):
2610+
def list_by_post(self, query, citype):
2611+
cmdb_client = self.get_cmdb_client()
2612+
query.setdefault('dialect', {"queryMode": "new"})
2613+
query.setdefault('filters', [])
2614+
query.setdefault('paging', False)
2615+
resp_json = cmdb_client.retrieve(citype, query)
2616+
return resp_json['data']

artifacts-corepy/artifacts_corepy/apps/package/controller.py

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from artifacts_corepy.common.controller import Collection, Item, POSTCollection
1616
from artifacts_corepy.common import exceptions
1717
from artifacts_corepy.apps.package import apiv2 as package_api
18+
from artifacts_corepy.common import constant
1819

1920
CONF = config.CONF
2021

@@ -53,6 +54,15 @@ class CollectionProcessDef(Collection):
5354
name = 'artifacts.process.defs'
5455
resource = package_api.ProcessDef
5556

57+
class CollectionUser(Collection):
58+
allow_methods = ('GET', )
59+
name = 'artifacts.users.list'
60+
resource = package_api.User
61+
62+
class CollectionCiData(POSTCollection):
63+
allow_methods = ('POST',)
64+
name = 'artifacts.diffconfigs'
65+
resource = package_api.CiData
5666

5767
class CollectionSystemDesign(Collection):
5868
allow_methods = ('GET', )
@@ -96,6 +106,14 @@ class CollectionUnitDesignPackages(POSTCollection):
96106
resource = package_api.UnitDesignPackages
97107

98108

109+
class CollectionPackageStatistics(POSTCollection):
110+
allow_methods = ('POST', )
111+
name = 'artifacts.packages.statistics'
112+
resource = package_api.UnitDesignPackages
113+
114+
def list(self, req, criteria, **kwargs):
115+
return self.make_resource(req).get_package_statistics(req.json, **kwargs)
116+
99117
class CollectionUnitDesignNexusPackages(POSTCollection):
100118
allow_methods = ('POST', )
101119
name = 'artifacts.unit-design.nexus.packages'
@@ -114,18 +132,23 @@ class CollectionUnitDesignNexusPackageUpload(object):
114132
def on_post(self, req, resp, **kwargs):
115133
download_url = req.params.get('downloadUrl', None)
116134
baseline_package = req.params.get('baseline_package', None)
135+
package_type = req.params.get('package_type', None)
136+
if not package_type:
137+
raise exceptions.ValidationError(message=_('missing query param: package_type'))
138+
elif package_type not in [constant.PackageType.app, constant.PackageType.db, constant.PackageType.mixed, constant.PackageType.image, constant.PackageType.rule]:
139+
raise exceptions.ValidationError(message=_('invalid package_type param value: %s') % package_type)
117140
if not download_url:
118-
raise exceptions.ValidationError(message=_('missing query: downloadUrl'))
119-
form = cgi.FieldStorage(fp=req.stream, environ=req.env)
141+
raise exceptions.ValidationError(message=_('missing query param: downloadUrl'))
142+
# form = cgi.FieldStorage(fp=req.stream, environ=req.env)
120143
resp.json = {
121144
'code': 200,
122145
'status': 'OK',
123-
'data': self.upload(req, download_url, baseline_package, **kwargs),
146+
'data': self.upload(req, download_url, baseline_package, package_type, **kwargs),
124147
'message': 'success'
125148
}
126149

127-
def upload(self, req, download_url, baseline_package, **kwargs):
128-
return self.resource().upload_from_nexus(download_url, baseline_package, **kwargs)
150+
def upload(self, req, download_url, baseline_package, package_type, **kwargs):
151+
return self.resource().upload_from_nexus(download_url, baseline_package, package_type, **kwargs)
129152

130153

131154
class CollectionUnitDesignPackageUpload(object):
@@ -135,17 +158,24 @@ class CollectionUnitDesignPackageUpload(object):
135158
def on_post(self, req, resp, **kwargs):
136159
form = cgi.FieldStorage(fp=req.stream, environ=req.env)
137160
baseline_package = None
161+
package_type = None
138162
if 'baseline_package' in form:
139163
baseline_package = form.getvalue('baseline_package', None)
164+
if 'package_type' in form:
165+
package_type = form.getvalue('package_type', None)
166+
if not package_type:
167+
raise exceptions.ValidationError(message=_('missing form param: package_type'))
168+
elif package_type not in [constant.PackageType.app, constant.PackageType.db, constant.PackageType.mixed, constant.PackageType.image, constant.PackageType.rule]:
169+
raise exceptions.ValidationError(message=_('invalid package_type param value: %s') % package_type)
140170
resp.json = {
141171
'code': 200,
142172
'status': 'OK',
143-
'data': self.upload(req, form['file'].filename, form['file'].type, form['file'].file, baseline_package, **kwargs),
173+
'data': self.upload(req, form['file'].filename, form['file'].type, form['file'].file, baseline_package, package_type, **kwargs),
144174
'message': 'success'
145175
}
146176

147-
def upload(self, req, filename, filetype, fileobj, baseline_package, **kwargs):
148-
return self.resource().upload(filename, filetype, fileobj, baseline_package, **kwargs)
177+
def upload(self, req, filename, filetype, fileobj, baseline_package, package_type, **kwargs):
178+
return self.resource().upload(filename, filetype, fileobj, baseline_package, package_type, **kwargs)
149179

150180

151181
class ItemPackage(Item):

artifacts-corepy/artifacts_corepy/apps/package/route.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ def __call__(self, req, resp, package_name, entity_name, action_name):
6666
def add_routes(api):
6767
# process
6868
api.add_route('/artifacts/process/definitions', controller.CollectionProcessDef())
69+
api.add_route('/artifacts/users', controller.CollectionUser())
70+
api.add_route('/artifacts/cidata/{citype}/query', controller.CollectionCiData())
6971
# cmdb api forward
7072
api.add_route('/artifacts/system-design-versions', controller.CollectionSystemDesign())
7173
api.add_route('/artifacts/system-design-versions/{rid}', controller.ItemSystemDesign())
@@ -76,6 +78,7 @@ def add_routes(api):
7678
api.add_route('/artifacts/enum/system/codes/{cat_id}', controller.ItemEnumCodes())
7779
api.add_route('/artifacts/ci-types/{ci_type_id}/operations', controller.ItemCITypeOperations())
7880
api.add_route('/artifacts/unit-designs/{unit_design_id}/packages/query', controller.CollectionUnitDesignPackages())
81+
api.add_route('/artifacts/unit-designs/{unit_design_id}/packages/statistics', controller.CollectionPackageStatistics())
7982
api.add_route('/artifacts/ci-types/{ci_type_id}/references/by', controller.ItemCiReferences())
8083
api.add_route('/artifacts/ci-types/{ci_type_id}/attributes', controller.ItemCiAttributes())
8184
api.add_route('/artifacts/ci-types/{ci_type_id}/ci-data/batch-delete', controller.CiDelete())

artifacts-corepy/artifacts_corepy/common/constant.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class PackageType(object):
88
db = 'DB'
99
mixed = 'APP&DB'
1010
image = 'IMAGE'
11+
rule = 'RULE'
1112
default = 'APP&DB'
1213

1314

artifacts-corepy/etc/artifacts_corepy.conf

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@
161161
"artifacts.ci-types": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"],
162162
"artifacts.enum-codes": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"],
163163
"artifacts.unit-design.packages": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"],
164+
"artifacts.packages.statistics": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"],
164165
"artifacts.unit-design.nexus.packages": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"],
165166
"artifacts.unit-design.nexus.package.upload": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"],
166167
"artifacts.unit-design.package.upload": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"],
@@ -180,7 +181,8 @@
180181
"artifacts.pushcomposepackage": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"],
181182
"artifacts.systemconfig": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"],
182183
"artifacts.unit-design.nexus.path": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"],
183-
"artifacts.process.defs": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"]
184+
"artifacts.process.defs": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"],
185+
"artifacts.users.list": ["SUB_SYSTEM", "IMPLEMENTATION_ARTIFACT_MANAGEMENT"]
184186
},
185187
"plugin_permissions": [
186188
"artifacts.plugins.fromimage"

artifacts-ui/src/api/server.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export const getSpecialConnector = () => req.get('/static-data/special-connector
4646
export const getVariableRootCiTypeId = () => req.get('/getVariableRootCiTypeId')
4747
export const getEntitiesByCiType = (packageName, ci, data) => req.post(`/platform/v1/packages/${packageName}/entities/${ci}/retrieve`, data)
4848
export const queryArtifactsList = (guid, data) => req.post(`/unit-designs/${guid}/packages/queryNexusDirectiry`, data)
49-
export const uploadArtifact = (guid, url, baselinePackage) => req.post(`/unit-designs/${guid}/packages/uploadNexusPackage?downloadUrl=${url}&&baseline_package=${baselinePackage}`)
49+
export const uploadArtifact = (guid, url, baselinePackage, packageType) => req.post(`/unit-designs/${guid}/packages/uploadNexusPackage?downloadUrl=${url}&baseline_package=${encodeURIComponent(baselinePackage)}&package_type=${encodeURIComponent(packageType)}`)
5050

5151
export const uploadLocalArtifact = (guid, formData) => req.post(`/unit-designs/${guid}/packages/upload`, formData)
5252

@@ -60,3 +60,7 @@ export const getFilePath = guid => req.get(`/unit-designs/${guid}/packages/query
6060
export const sysConfig = () => req.get(`/sysconfig`)
6161
// 获取可用编排
6262
export const getFlowLists = guid => req.get(`/process/definitions?rootEntityGuid=${guid}`)
63+
// 获取各包类型下数据的数量
64+
export const getPkgTypeNum = unitDesignId => req.post(`/unit-designs/${unitDesignId}/packages/statistics`, {})
65+
66+
export const getUserList = guid => req.get(`/users`)

0 commit comments

Comments
 (0)