@@ -952,6 +952,31 @@ def get_app_proc(cls, appname, procname, options=None):
952952 appname , procname , e ),
953953 reverse ('api_procs' , kwargs = {'appname' : appname }))
954954
955+ @classmethod
956+ def get_proc_history (cls , appname , procname , instance , options = None ):
957+ try :
958+ app = App .get_or_none (appname )
959+ if not app .is_reachable ():
960+ return (404 , None ,
961+ 'app with appname %s has not been deployd\n ' % appname ,
962+ reverse ('api_apps' ))
963+ status_history = app .podgroup_status_history (procname , instance )
964+ if status_history :
965+ return (200 , status_history ,
966+ '' , reverse ('api_proc_history' ,
967+ kwargs = {'appname' : appname , 'procname' : procname , 'instance' : instance }))
968+ else :
969+ return (200 , [],
970+ 'proc %s do not exists' % (procname ),
971+ reverse ('api_proc_history' ,
972+ kwargs = {'appname' : appname , 'procname' : procname , 'instance' : instance }))
973+ except Exception , e :
974+ client .captureException ()
975+ return (500 , None ,
976+ 'fatal error when get app %s proc %s:\n %s\n please contact with admin of lain\n ' % (
977+ appname , procname , e ),
978+ reverse ('api_procs' , kwargs = {'appname' : appname }))
979+
955980 @classmethod
956981 def update_app_proc (cls , appname , procname , options ):
957982 def verify_options (options ):
@@ -1104,6 +1129,59 @@ def delete_app_proc(cls, appname, procname, options=None):
11041129 appname , procname , e ),
11051130 reverse ('api_proc' , kwargs = {'appname' : appname , 'procname' : procname }))
11061131
1132+ @classmethod
1133+ def operate_proc (cls , appname , procname , operation , options = None ):
1134+ try :
1135+ instance = int (options .get ('instance' , 0 ))
1136+ app = App .get_or_none (appname )
1137+ if not app .is_reachable ():
1138+ return (404 , None ,
1139+ 'app with appname %s has not been deployd\n ' % appname ,
1140+ reverse ('api_apps' ))
1141+ proc , pg_status = app .proc_and_pg_status (procname )
1142+ if proc is None :
1143+ return (404 , None ,
1144+ 'no such proc %s in app %s' % (procname , appname ),
1145+ reverse ('api_procs' , kwargs = {'appname' : appname }))
1146+ if pg_status :
1147+ container_name = None
1148+ if instance != 0 :
1149+ pods = pg_status ['Status' ]['Pods' ]
1150+ if instance <= len (pods ):
1151+ container_name = pods [
1152+ instance - 1 ]['Containers' ][0 ]['Runtime' ]['Name' ]
1153+ else :
1154+ return (404 , None , 'no such proc %s instance %d, in app %s' % (procname , instance , appname ),
1155+ reverse ('api_procs' , kwargs = {'appname' : appname }))
1156+ if container_name :
1157+ add_oplog (AuthApi .operater , operation .upper (), appname , "" ,
1158+ "%s container %s" % (operation , container_name ))
1159+ else :
1160+ add_oplog (AuthApi .operater , operation .upper (), appname , "" ,
1161+ "%s proc %s" % (operation , procname ))
1162+
1163+ podgroup_name = "%s.%s.%s" % (
1164+ appname , proc .type .name , proc .name )
1165+ result = app .podgroup_operate (podgroup_name , instance , operation )
1166+ if result .status_code < 400 :
1167+ return (202 , ProcApi .render_proc_data (appname , proc ),
1168+ render_op_result_to_msg (result ),
1169+ reverse ('api_procs' , kwargs = {'appname' : appname }))
1170+ else :
1171+ return (500 , ProcApi .render_proc_data (appname , proc ),
1172+ render_op_result_to_msg (result ),
1173+ reverse ('api_proc' , kwargs = {'appname' : appname , 'procname' : procname }))
1174+ else :
1175+ return (400 , ProcApi .render_proc_data (appname , proc ),
1176+ 'proc %s exists but not deployed\n please deploy it first\n ' % (
1177+ procname ),
1178+ reverse ('api_proc' , kwargs = {'appname' : appname , 'procname' : procname }))
1179+ except Exception , e :
1180+ client .captureException ()
1181+ return (500 , None ,
1182+ 'fatal error when %s app %s proc %s:\n %s\n please contact with admin of lain\n ' % (
1183+ operation , appname , procname , e ),
1184+ reverse ('api_proc' , kwargs = {'appname' : appname , 'procname' : procname }))
11071185
11081186'''
11091187这个类响应 console.views 关于 maintainer 的所有调用
@@ -1420,6 +1498,14 @@ def gen_release_image(cls, app, base_image, config_tag, config_layer_count):
14201498 app .appname , config_tag , config_layer_count , target_repo , target_tag )
14211499 return "%s:%s-%s" % (target_repo , target_tag , config_tag )
14221500
1501+ @classmethod
1502+ def list_ports (cls ):
1503+ resp = Streamrouter .get_streamrouter_ports ()
1504+ if resp == None :
1505+ return (400 , None , '' , reverse ('api_streamrouter' ))
1506+ else :
1507+ return (200 , resp , '' , reverse ('api_streamrouter' ))
1508+
14231509
14241510class StreamrouterApi :
14251511
0 commit comments