Skip to content

Commit dcc754a

Browse files
committed
sql工单orc操作迁移只api
1 parent 84d0d48 commit dcc754a

File tree

6 files changed

+56
-65
lines changed

6 files changed

+56
-65
lines changed

sql/sql_workflow.py

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -202,24 +202,3 @@ def cancel(request):
202202
task_name=f"sqlreview-cancel-{workflow_id}",
203203
)
204204
return HttpResponseRedirect(reverse("sql:detail", args=(workflow_id,)))
205-
206-
207-
def osc_control(request):
208-
"""用于mysql控制osc执行"""
209-
workflow_id = request.POST.get("workflow_id")
210-
sqlsha1 = request.POST.get("sqlsha1")
211-
command = request.POST.get("command")
212-
workflow = SqlWorkflow.objects.get(id=workflow_id)
213-
execute_engine = get_engine(workflow.instance)
214-
try:
215-
execute_result = execute_engine.osc_control(command=command, sqlsha1=sqlsha1)
216-
rows = execute_result.to_dict()
217-
error = execute_result.error
218-
except Exception as e:
219-
rows = []
220-
error = str(e)
221-
result = {"total": len(rows), "rows": rows, "msg": error}
222-
return HttpResponse(
223-
json.dumps(result, cls=ExtendJSONEncoder, bigint_as_string=True),
224-
content_type="application/json",
225-
)

sql/templates/detail.html

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -763,8 +763,9 @@ <h4 class="modal-title text-danger">修改可执行时间</h4>
763763
$('#osc_percent_list').bootstrapTable('destroy').bootstrapTable({
764764
escape: true,
765765
method: 'post',
766-
contentType: "application/x-www-form-urlencoded",
767-
url: "/inception/osc_control/",
766+
contentType: "application/json",
767+
url: "/api/v2/workflow/sql/" + workflow_id + "/mysql_osc_control/",
768+
dataType: "json",
768769
striped: true, //是否显示行间隔色
769770
cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
770771
pagination: false, //是否显示分页(*)
@@ -807,11 +808,11 @@ <h4 class="modal-title text-danger">修改可执行时间</h4>
807808
//请求服务数据时所传参数
808809
queryParams:
809810
function (params) {
810-
return {
811+
return JSON.stringify({
811812
sqlsha1: $(obj).attr("sqlsha1"),
812813
workflow_id: "{{ workflow_detail.id }}",
813814
command: "get"
814-
}
815+
})
815816
},
816817
columns: [{
817818
title: '',
@@ -886,11 +887,11 @@ <h4 class="modal-title text-danger">修改可执行时间</h4>
886887
//发送请求
887888
$.ajax({
888889
type: "post",
889-
url: "/inception/osc_control/",
890+
contentType: "application/json",
891+
url: "/api/v2/workflow/sql/" + workflow_id + "/mysql_osc_control/",
890892
dataType: "json",
891893
data: {
892894
sqlsha1: sqlsha1,
893-
workflow_id: "{{ workflow_detail.id }}",
894895
command: command
895896
},
896897
complete: function () {

sql/tests.py

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1524,38 +1524,6 @@ def testWorkflowCancelView(self, _can_cancel, _audit, _detail_by_id, _add_log):
15241524
self.wf2.refresh_from_db()
15251525
self.assertEqual("workflow_abort", self.wf2.status)
15261526

1527-
@patch("sql.sql_workflow.get_engine")
1528-
def test_osc_control(self, _get_engine):
1529-
"""测试MySQL工单osc控制"""
1530-
c = Client()
1531-
c.force_login(self.superuser1)
1532-
request_data = {
1533-
"workflow_id": self.wf1.id,
1534-
"sqlsha1": "sqlsha1",
1535-
"command": "get",
1536-
}
1537-
_get_engine.return_value.osc_control.return_value = ResultSet()
1538-
r = c.post("/inception/osc_control/", data=request_data, follow=False)
1539-
self.assertDictEqual(
1540-
json.loads(r.content), {"total": 0, "rows": [], "msg": None}
1541-
)
1542-
1543-
@patch("sql.sql_workflow.get_engine")
1544-
def test_osc_control_exception(self, _get_engine):
1545-
"""测试MySQL工单OSC控制异常"""
1546-
c = Client()
1547-
c.force_login(self.superuser1)
1548-
request_data = {
1549-
"workflow_id": self.wf1.id,
1550-
"sqlsha1": "sqlsha1",
1551-
"command": "get",
1552-
}
1553-
_get_engine.return_value.osc_control.side_effect = RuntimeError("RuntimeError")
1554-
r = c.post("/inception/osc_control/", data=request_data, follow=False)
1555-
self.assertDictEqual(
1556-
json.loads(r.content), {"total": 0, "rows": [], "msg": "RuntimeError"}
1557-
)
1558-
15591527

15601528
class TestOptimize(TestCase):
15611529
"""

sql/urls.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@
7676
path("audit_sqlworkflow/", views.audit_sqlworkflow),
7777
path("authenticate/", auth.authenticate_entry),
7878
path("del_sqlcronjob/", tasks.del_schedule),
79-
path("inception/osc_control/", sql_workflow.osc_control),
8079
path("sql_analyze/generate/", sql_analyze.generate),
8180
path("sql_analyze/analyze/", sql_analyze.analyze),
8281
path("workflow/list/", workflow.lists),

sql_api/api_views/sql_workflow.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import django_filters
1111
from django.contrib.auth.decorators import permission_required
1212
from django.utils.decorators import method_decorator
13-
from drf_spectacular.types import OpenApiTypes
1413
from drf_spectacular.utils import extend_schema, extend_schema_view
1514
from rest_framework import serializers, viewsets, filters
1615
from rest_framework.decorators import action
@@ -30,6 +29,7 @@
3029
SqlWorkflowDetailSerializer,
3130
SqlWorkflowExecuteSerializer,
3231
SqlWorkflowTimingTaskSerializer,
32+
SqlWorkflowMySQLOscControlSerializer,
3333
)
3434

3535

@@ -169,7 +169,7 @@ def alter_run_date(self, request, *args, **kwargs):
169169
@extend_schema(
170170
summary="立即执行工单",
171171
request=SqlWorkflowExecuteSerializer,
172-
responses={200: OpenApiTypes.NUMBER},
172+
responses={200: SqlWorkflowSerializer},
173173
description="通过工单ID执行工单",
174174
)
175175
@action(methods=["post"], detail=True)
@@ -179,12 +179,12 @@ def execute(self, request, *args, **kwargs):
179179
mode = request.data.get("mode")
180180
serializer = self.get_serializer()
181181
serializer.execute(obj, mode=mode, username=request.user.username)
182-
return Response(obj.id)
182+
return Response(serializer.data)
183183

184184
@extend_schema(
185185
summary="设置定时执行工单",
186186
request=SqlWorkflowTimingTaskSerializer,
187-
responses={200: OpenApiTypes.DATETIME},
187+
responses={200: SqlWorkflowSerializer},
188188
description="通过工单ID执行工单",
189189
)
190190
@action(methods=["post"], detail=True)
@@ -196,4 +196,24 @@ def timing_task(self, request, *args, **kwargs):
196196
run_date = request.data.get("run_date")
197197
serializer = self.get_serializer()
198198
serializer.timing_task(obj, run_date=run_date, username=request.user.username)
199-
return Response(run_date)
199+
return Response(serializer.data)
200+
201+
@extend_schema(
202+
summary="用于MySQL的大表DDL控制",
203+
request=SqlWorkflowMySQLOscControlSerializer,
204+
responses={200: SqlWorkflowSerializer},
205+
description="控制pt-osc、gh-ost任务,用于执行进度获取,暂停、恢复、终止执行等",
206+
)
207+
@action(methods=["post"], detail=True)
208+
def mysql_osc_control(self, request, *args, **kwargs):
209+
obj = self.get_object()
210+
SqlWorkflowMySQLOscControlSerializer(data=request.data).is_valid(
211+
raise_exception=True
212+
)
213+
sqlsha1 = request.data.get("sqlsha1")
214+
command = request.data.get("command")
215+
serializer = self.get_serializer()
216+
serializer.mysql_osc_control(
217+
obj, sqlsha1=sqlsha1, command=command, username=request.user.username
218+
)
219+
return Response(serializer.data)

sql_api/serializers/sql_workflow.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,19 @@ def timing_task(obj, run_date, username):
251251
operator_display=user.display,
252252
)
253253

254+
@staticmethod
255+
def mysql_osc_control(obj, sqlsha1, command):
256+
"""用于MySQL的大表DDL控制"""
257+
execute_engine = get_engine(instance=obj.instance)
258+
try:
259+
execute_result = execute_engine.osc_control(command=command, sqlsha1=sqlsha1)
260+
rows = execute_result.to_dict()
261+
error = execute_result.error
262+
except Exception as e:
263+
rows = []
264+
error = str(e)
265+
return {"total": len(rows), "rows": rows, "msg": error}
266+
254267
class Meta:
255268
model = SqlWorkflow
256269
fields = "__all__"
@@ -274,3 +287,14 @@ class SqlWorkflowTimingTaskSerializer(serializers.Serializer):
274287
run_date = serializers.DateTimeField(
275288
label="定时执行时间",
276289
)
290+
291+
292+
class SqlWorkflowMySQLOscControlSerializer(serializers.Serializer):
293+
"""用于MySQL的大表DDL控制"""
294+
295+
sqlsha1 = serializers.CharField(
296+
label="SQL审核返回的sqlsha1信息",
297+
)
298+
command = serializers.ChoiceField(
299+
choices=["get", "pause", "resume", "kill"], label="命令:get-获取详情,pause-暂停,resume-恢复,kill-终止"
300+
)

0 commit comments

Comments
 (0)