123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- # -*- coding:utf-8 -*-
- # Copyright 2017 Xiaomi, Inc.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- __author__ = 'Ulric Qin'
- from .bean import Bean
- from rrd.config import MAINTAINERS
- from .strategy import Strategy
- from .action import Action
- from rrd.model.user import User
- class Template(Bean):
- _tbl = 'tpl'
- _cols = 'id, tpl_name, parent_id, action_id, create_user'
- def __init__(self, _id, tpl_name, parent_id, action_id, create_user):
- self.id = _id
- self.tpl_name = tpl_name
- self.parent_id = parent_id
- self.action_id = action_id
- self.create_user = create_user
- self.parent = None
- self.action = None
- def to_json(self):
- return {
- 'id': self.id,
- 'name': self.tpl_name,
- 'parent_id': self.parent_id,
- 'action_id': self.action_id,
- 'create_user': self.create_user,
- }
- @classmethod
- def query(cls, page, limit, query, me=None):
- where = ''
- params = []
- if me is not None:
- where = 'create_user = %s'
- params = [me]
- if query:
- where += ' and ' if where else ''
- where += 'tpl_name like %s'
- params.append('%' + query + '%')
- vs = cls.select_vs(where=where, params=params, page=page, limit=limit, order='tpl_name')
- total = cls.total(where, params)
- return vs, total
- def writable(self, login_user):
- #login_user can be str or User obj
- if isinstance(login_user, str):
- login_user = User.get_by_name(login_user)
- if not login_user:
- return False
- if login_user.is_admin() or login_user.is_root():
- return True
- if self.create_user == login_user.name:
- return True
- if login_user.name in MAINTAINERS:
- return True
- a = self.action
- if not a:
- return False
- if not a.uic:
- return False
- return login_user.in_teams(a.uic)
- def fork(self, login_user):
- new_name = 'copy_of_' + self.tpl_name
- if self.__class__.read('tpl_name=%s', [new_name]):
- return -1
- # fork action
- action_id = self.action_id
- if action_id:
- action = Action.get(action_id)
- if action:
- action_id = Action.insert(
- {
- 'uic': action.uic,
- 'url': action.url,
- 'callback': action.callback,
- 'before_callback_sms': action.before_callback_sms,
- 'before_callback_mail': action.before_callback_mail,
- 'after_callback_sms': action.after_callback_sms,
- 'after_callback_mail': action.after_callback_mail,
- }
- )
- # fork tpl
- tpl_id = self.__class__.insert({
- 'tpl_name': new_name,
- 'parent_id': self.parent_id,
- 'action_id': action_id,
- 'create_user': login_user,
- })
- # fork strategy
- ss = Strategy.select_vs(where='tpl_id = %s', params=[self.id])
- for s in ss:
- Strategy.insert({
- 'metric': s.metric,
- 'tags': s.tags,
- 'max_step': s.max_step,
- 'priority': s.priority,
- 'func': s.func,
- 'op': s.op,
- 'right_value': s.right_value,
- 'note': s.note,
- 'run_begin': s.run_begin,
- 'run_end': s.run_end,
- 'tpl_id': tpl_id,
- })
- return tpl_id
|