Files
project-panel/__pycache__/routes_cron.cpython-312.pyc

53 lines
14 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00> jS*<00><00>N<00>dZddlmZmZddlmZddlmZmZm Z m
Z
m Z m Z m Z d<05>Zy)u
Cron 管理 API 路由
<EFBFBD>)<02>jsonify<66>request)<01>get_db)<07> log_message<67>sync_crontab_from_db<64>get_system_crons<6E>cron_expression_to_human<61>get_next_run_time<6D>guess_cron_name<6D>guess_cron_categoryc<00><><00>|jd<01>d<02><00>}|jddg<01><04>d<05><00>}|jddg<01><04>d<08><00>}|jdd g<01><04>d
<EFBFBD><00>}|jd dg<01><04>d <0C><00>}|jd <0A>d<0E><00>}|jddg<01><04>d<10><00>}|jd<11>d<12><00>}|jd<13>d<14><00>} |jddg<01><04>d<16><00>}
y)u注册 Cron 相关路由z/api/cron/tasksc<00><00>t<00>}|j<00>}|jd<01>|j<00>D<00>cgc] }t |<02><00><02>}}|D]$}t |d<00>|d<t |d<00>|d<<00>&td|i<01>Scc}w)u'获取数据库中的 Cron 任务列表z1SELECT * FROM cron_tasks ORDER BY created_at DESC<53>
expression<EFBFBD>
human_time<EFBFBD>next_run<75>tasks)r<00>cursor<6F>execute<74>fetchall<6C>dictr r
r)<05>db<64>c<>rowr<00>tasks <20>Q/home/openclaw/.openclaw/workspace-hz4th_coder/works/project-panel/routes_cron.py<70>api_cron_tasksz,register_cron_routes.<locals>.api_cron_taskss<><00><00><14>X<EFBFBD><02> <0E>I<EFBFBD>I<EFBFBD>K<EFBFBD><01> <09> <09> <09>E<>F<>&'<27>j<EFBFBD>j<EFBFBD>l<EFBFBD>3<>l<EFBFBD>s<EFBFBD><14>c<EFBFBD><19>l<EFBFBD><05>3<><1A>D<EFBFBD>!9<>$<24>|<7C>:L<>!M<>D<EFBFBD><1C> <1E>0<><14>l<EFBFBD>1C<31>D<>D<EFBFBD><1A> <1C><1A><17><07><15>'<27>(<28>(<28><>4s<00>B<04>POST)<01>methodsc <00><><00>tj}|jd<01>r"|jd<02>r|jd<03>stddi<01>dfSt <00>}|j <00>}|j d|d|d|d|jdd <09>|jd
d <0B>d f<06>|j}|j<00>|j d ||d|d|d|jdd <09>|jd
d <0B>d f<07>|j<00>t|<01>td|d<00>d|d<00>d<10><05>td|d<12><02>S)u添加新的 Cron 任务<E4BBBB>namer<00>command<6E>erroru缺少必要字段i<E6AEB5>z<>INSERT INTO cron_tasks (name, expression, command, description, category, enabled)
VALUES (?, ?, ?, ?, ?, ?)<29> description<6F><00>category<72>other<65>z<>INSERT INTO cron_history (task_id, version, name, expression, command, description, category, enabled, operation)
VALUES (?, 1, ?, ?, ?, ?, ?, ?, 'create')u添加 Cron 任务: z (<28>)u任务添加成功)<02>message<67>task_id) r<00>json<6F>getrrrr<00> lastrowid<69>commitrr)<04>datarrr*s r<00> api_cron_addz*register_cron_routes.<locals>.api_cron_add sm<00><00><17>|<7C>|<7C><04><13>x<EFBFBD>x<EFBFBD><06><1F>t<EFBFBD>x<EFBFBD>x<EFBFBD> <0C>'=<3D>T<EFBFBD>X<EFBFBD>X<EFBFBD>i<EFBFBD>EX<45><1A>G<EFBFBD>%9<>:<3A>;<3B>S<EFBFBD>@<40> @<40> <13>X<EFBFBD><02> <0E>I<EFBFBD>I<EFBFBD>K<EFBFBD><01>
<EFBFBD> <09> <09>1<><17><06><<3C><14>l<EFBFBD>!3<>T<EFBFBD>)<29>_<EFBFBD>d<EFBFBD>h<EFBFBD>h<EFBFBD>}<7D>^`<60>Fa<46>cg<63>ck<63>ck<63>lv<6C>x<78>dA<02>CD<02>E<02> F<02><14>+<2B>+<2B><07>
<EFBFBD> <09> <09> <0B>
<EFBFBD> <09> <09>A<01><1A>D<EFBFBD><16>L<EFBFBD>$<24>|<7C>*<<3C>d<EFBFBD>9<EFBFBD>o<EFBFBD>t<EFBFBD>x<EFBFBD>x<EFBFBD>Xe<58>gi<67>Oj<4F>lp<6C>lt<6C>lt<6C>u<75>BI<02>mJ<02>LM<02>N<02> O<02> <0B> <09> <09> <0B> <1D>R<EFBFBD> <20><13>*<2A>4<EFBFBD><06><<3C>.<2E><02>4<EFBFBD> <0C>;M<>:N<>a<EFBFBD>P<>Q<><16>#7<>G<EFBFBD>L<>M<>M<>z/api/cron/tasks/<int:task_id><3E>PUTc<00><><00>tj}t<00>}|j<00>}|j d|f<01>|j <00>}|st ddi<01>dfS|j d|f<01>|j <00>dxsd}|dz}g}g}dD]/} | |vs<01>|j| <09>d <09><02>|j|| <00><00>1|rJ|jd
<EFBFBD>|j d d j|<07><00>d <0A>||gz<00>|j<00>|j d|||jd|d<00>|jd|d<00>|jd|d<00>|jd|d<00>|jd|d<00>|jd|d<00>f<08>|j<00>t|<02>td|<00>d|<06><00><04>t d|d<18><02>S)u更新 Cron 任务<E4BBBB>%SELECT * FROM cron_tasks WHERE id = ?r"<00>任务不存在<E5AD98><E59CA8><00>7SELECT MAX(version) FROM cron_history WHERE task_id = ?rr')r rr!r#r%<00>enabledz = ?zupdated_at = CURRENT_TIMESTAMPzUPDATE cron_tasks SET <20>,z WHERE id = ?z<>INSERT INTO cron_history (task_id, version, name, expression, command, description, category, enabled, operation)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'update')r rr!r#r%r8u更新 Cron 任务 ID=u : 版本 u任务更新成功)r)<00>version) rr+rrr<00>fetchoner<00>append<6E>joinr.r,rr)
r*r/rr<00>old_task<73> max_version<6F> new_version<6F> update_fields<64> update_values<65>fields
r<00>api_cron_updatez-register_cron_routes.<locals>.api_cron_update@s<><00><00><17>|<7C>|<7C><04> <13>X<EFBFBD><02> <0E>I<EFBFBD>I<EFBFBD>K<EFBFBD><01>
<EFBFBD> <09> <09>9<>G<EFBFBD>:<3A>F<><14>:<3A>:<3A><<3C><08><17><1A>G<EFBFBD>%6<>7<>8<>#<23>=<3D> =<3D>
<EFBFBD> <09> <09>K<>g<EFBFBD>Z<EFBFBD>X<><17>j<EFBFBD>j<EFBFBD>l<EFBFBD>1<EFBFBD>o<EFBFBD>*<2A><11> <0B>!<21>A<EFBFBD>o<EFBFBD> <0B><1B> <0A><1A> <0A>\<5C>E<EFBFBD><14><04>}<7D><1D>$<24>$<24><05>w<EFBFBD>d<EFBFBD>^<5E>4<><1D>$<24>$<24>T<EFBFBD>%<25>[<5B>1<>]<01>
<19> <19> <20> <20>!A<> B<> <0A>I<EFBFBD>I<EFBFBD>.<2E>s<EFBFBD>x<EFBFBD>x<EFBFBD> <0A>/F<>.G<>}<7D>U<>Wd<57>ho<68>gp<67>Wp<57> q<> <0E>I<EFBFBD>I<EFBFBD>K<EFBFBD>
<EFBFBD> <09> <09>A<01><1A>K<EFBFBD><14><18><18>&<26>(<28>6<EFBFBD>:J<>)K<>T<EFBFBD>X<EFBFBD>X<EFBFBD>Vb<56>dl<64>my<6D>dz<64>M{<7B><17>8<EFBFBD>8<EFBFBD>I<EFBFBD>x<EFBFBD> <09>':<3A>;<3B>T<EFBFBD>X<EFBFBD>X<EFBFBD>m<EFBFBD>U]<5D>^k<>Ul<55>=m<><17>8<EFBFBD>8<EFBFBD>J<EFBFBD><08><1A>(<<3C>=<3D>t<EFBFBD>x<EFBFBD>x<EFBFBD> <09>S[<5B>\e<>Sf<53>?g<>i<01> j<01>
<0B> <09> <09> <0B> <1D>R<EFBFBD> <20><13>,<2C>W<EFBFBD>I<EFBFBD>Y<EFBFBD>{<7B>m<EFBFBD>L<>M<><16>#7<>K<EFBFBD>P<>Q<>Qr1<00>DELETEc <00><00>t<00>}|j<00>}|jd|f<01>|j<00>}|st ddi<01>dfS|jd|f<01>|j<00>dxsd}|jd||dz|d |d
|d |d |d |df<08>|j <00>|jd|f<01>|j <00>t |<01>td|<00>d|d <00><00><04>t ddi<01>S)u删除 Cron 任务r4r"r5r6r7rz<>INSERT INTO cron_history (task_id, version, name, expression, command, description, category, enabled, operation)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'delete')r'r rr!r#r%r8z#DELETE FROM cron_tasks WHERE id = ?u删除 Cron 任务 ID=z: r)u任务删除成功<E68890>rrrr;rr.rr)r*rrrr?s r<00>api_cron_deletez-register_cron_routes.<locals>.api_cron_deletens3<00><00><14>X<EFBFBD><02> <0E>I<EFBFBD>I<EFBFBD>K<EFBFBD><01> <09> <09> <09>9<>G<EFBFBD>:<3A>F<><10>z<EFBFBD>z<EFBFBD>|<7C><04><13><1A>G<EFBFBD>%6<>7<>8<>#<23>=<3D> =<3D>
<EFBFBD> <09> <09>K<>g<EFBFBD>Z<EFBFBD>X<><17>j<EFBFBD>j<EFBFBD>l<EFBFBD>1<EFBFBD>o<EFBFBD>*<2A><11> <0B> <09> <09> <09>A<01><1A>K<EFBFBD>!<21>O<EFBFBD>T<EFBFBD>&<26>\<5C>4<EFBFBD> <0C>;M<>t<EFBFBD>T]<5D><EFBFBD>`d<>er<65>`s<>uy<75>{E<02>vF<02>HL<02>MV<02>HW<02>X<02> Y<02> <0B> <09> <09> <0B>
<EFBFBD> <09> <09>7<>'<27><1A>D<>
<EFBFBD> <09> <09> <0B> <1D>R<EFBFBD> <20><13>,<2C>W<EFBFBD>I<EFBFBD>R<EFBFBD><04>V<EFBFBD> <0C>~<7E>F<>G<><16> <09>#7<>8<>9<>9r1z$/api/cron/tasks/<int:task_id>/togglec<00>R<00>t<00>}|j<00>}|jd|f<01>|j<00>}|st ddi<01>dfS|ddk(rdnd}|jd||f<02>|j <00>t |<01>td |<00>d
|<04><00><04>t d |d <0C><02>S) u启用/禁用 Cron 任务z+SELECT enabled FROM cron_tasks WHERE id = ?r"r5r6r8r'rzNUPDATE cron_tasks SET enabled = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?u切换 Cron 任务 ID=u 状态: u状态已切换)r)r8rG)r*rrr<00> new_enableds r<00>api_cron_togglez-register_cron_routes.<locals>.api_cron_toggle<6C>s<><00><00><14>X<EFBFBD><02> <0E>I<EFBFBD>I<EFBFBD>K<EFBFBD><01> <09> <09> <09>?<3F>'<27><1A>L<><10>z<EFBFBD>z<EFBFBD>|<7C><04><13><1A>G<EFBFBD>%6<>7<>8<>#<23>=<3D> =<3D><1F> <09>?<3F>a<EFBFBD>/<2F>a<EFBFBD>Q<EFBFBD> <0B> <09> <09> <09>b<>ep<65>ry<72>dz<64>{<7B>
<EFBFBD> <09> <09> <0B> <1D>R<EFBFBD> <20><13>,<2C>W<EFBFBD>I<EFBFBD>Y<EFBFBD>{<7B>m<EFBFBD>L<>M<><16>#4<><1B>M<>N<>Nr1z%/api/cron/tasks/<int:task_id>/historyc<00><00>t<00>}|j<00>}|jd|f<01>|j<00>D<00>cgc] }t |<03><00><02>}}|D]}|ds<01> t |d<00>|d<<00>t d|i<01>Scc}w)u获取任务历史版本zBSELECT * FROM cron_history WHERE task_id = ? ORDER BY version DESCrr<00>history)rrrrrr r)r*rrrrM<00>hs r<00>api_cron_historyz.register_cron_routes.<locals>.api_cron_history<72>s<><00><00><14>X<EFBFBD><02> <0E>I<EFBFBD>I<EFBFBD>K<EFBFBD><01> <09> <09> <09>V<>Y`<60>Xb<58>c<>()<29>
<EFBFBD>
<EFBFBD> <0C>5<> <0C><13>4<EFBFBD><03>9<EFBFBD> <0C><07>5<><18>A<EFBFBD><10><1C><EFBFBD>":<3A>1<EFBFBD>\<5C>?<3F>"K<><01>,<2C><0F><19><17> <09>7<EFBFBD>+<2B>,<2C>,<2C><> 6s<00>A?z4/api/cron/tasks/<int:task_id>/rollback/<int:version>c
<00>n<00>t<00>}|j<00>}|jd||f<02>|j<00>}|st ddi<01>dfS|jd|d|d|d|d |d
|d |f<07>|j <00>t |<02>td |<00>d |<01><00><04>t dd|<01><00>i<01>S)u回退到指定版本z<SELECT * FROM cron_history WHERE task_id = ? AND version = ?r"u版本不存在r6z<>UPDATE cron_tasks SET name = ?, expression = ?, command = ?, description = ?, category = ?, enabled = ?, updated_at = CURRENT_TIMESTAMP
WHERE id = ?r rr!r#r%r8u回退 Cron 任务 ID=u 到版本 r)u已回退到版本 rG)r*r:rrrMs r<00>api_cron_rollbackz/register_cron_routes.<locals>.api_cron_rollback<63>s<><00><00><14>X<EFBFBD><02> <0E>I<EFBFBD>I<EFBFBD>K<EFBFBD><01> <09> <09> <09>P<>SZ<53>\c<>Rd<52>e<><13>*<2A>*<2A>,<2C><07><16><1A>G<EFBFBD>%6<>7<>8<>#<23>=<3D> =<3D>
<EFBFBD> <09> <09>$<24><1A>6<EFBFBD>?<3F>G<EFBFBD>L<EFBFBD>$9<>7<EFBFBD>9<EFBFBD>;M<>w<EFBFBD>Wd<57>Oe<4F>gn<67>oy<6F>gz<67>}D<02>EN<02>}O<02>QX<02>Y<02> Z<02> <0B> <09> <09> <0B> <1D>R<EFBFBD> <20><13>,<2C>W<EFBFBD>I<EFBFBD>[<5B><17> <09>J<>K<><16> <09>%8<><17> <09>#B<>C<>D<>Dr1z"/api/cron/tasks/<int:task_id>/logsc<00><><00>t<00>}|j<00>}|jd|f<01>|j<00>D<00>cgc] }t |<03><00><02>}}t d|i<01>Scc}w)u获取任务执行日志zPSELECT * FROM cron_logs WHERE task_id = ? ORDER BY execution_time DESC LIMIT 100<30>logs)rrrrrr)r*rrrrSs r<00> api_cron_logsz+register_cron_routes.<locals>.api_cron_logs<67>s[<00><00><14>X<EFBFBD><02> <0E>I<EFBFBD>I<EFBFBD>K<EFBFBD><01> <09> <09> <09>d<>gn<67>fp<66>q<>%&<26>Z<EFBFBD>Z<EFBFBD>\<5C>2<>\<5C>c<EFBFBD><04>S<EFBFBD> <09>\<5C><04>2<><16><06><04>~<7E>&<26>&<26><>3s<00>A!z/api/cron/categoriesc <00>t<00>ddddd<05>dddd d<05>d
d d d d<05>ddddd<05>ddddd<05>ddddd<05>ddddd<05>g}td|i<01>S)u获取任务分类列表<E58897>monitoru 系统监控zri-heart-pulse-line<6E>blue)<04>idr <00>icon<6F>color<6F>backupu 数据备份zri-archive-line<6E>green<65>cleanupu 清理任务zri-delete-bin-line<6E>yellow<6F>reportu 报表生成zri-file-chart-line<6E>purple<6C>syncu 数据同步zri-refresh-line<6E>cyan<61> notificationu 通知提醒zri-notification-line<6E>oranger&u 其他任务z ri-more-line<6E>gray<61>
categories)r)rfs r<00>api_cron_categoriesz1register_cron_routes.<locals>.api_cron_categories<65>s~<00><00><1D>n<EFBFBD>>S<>^d<> e<><1B>^<5E>=N<>Y`<60> a<><1C>n<EFBFBD>>R<>]e<> f<><1B>^<5E>=Q<>\d<> e<><19>><3E>;L<>W]<5D> ^<5E>!<21>><3E>CY<43>dl<64> m<><1A>N<EFBFBD>N<EFBFBD>U[<5B> \<5C>
<EFBFBD>
<EFBFBD><17> <0C>j<EFBFBD>1<>2<>2r1z/api/cron/syncc <00><><00>t<00>}|D<00>cgc] }|ddk(s<01> |<01><02>}}t<00>}|j<00>}|jd<03>|jd<04>|jd<05>d}|D]@}t |d<00>}t |d<00>}|jd||d |dd
|f<05>|d z }<04>B|j <00>td |<04>d <0A><03>td|<04>d<0F>|d<10><02>Scc}w)u]从系统 crontab 同步到数据库清空旧的只保留当前系统实际存在的<E79A84>source<63>userzEDELETE FROM cron_history WHERE task_id IN (SELECT id FROM cron_tasks)zBDELETE FROM cron_logs WHERE task_id IN (SELECT id FROM cron_tasks)zDELETE FROM cron_tasksrr!z<>INSERT INTO cron_tasks (name, expression, command, description, category, enabled)
VALUES (?, ?, ?, ?, ?, 1)rr$r'u从系统 crontab 同步了 u" 个任务已清空旧任务u同步完成,共 u
个任务)r)<00>count) rrrrr r r.rr)<08>cronsr<00>
user_cronsr<00> synced_count<6E>cronr r%s r<00> api_cron_syncz+register_cron_routes.<locals>.api_cron_sync<6E>s<00><00>!<21>"<22><05>!&<26>@<40><15>A<EFBFBD>!<21>H<EFBFBD>+<2B><16>*?<3F>a<EFBFBD><15>
<EFBFBD>@<40> <13>X<EFBFBD><02> <0E>I<EFBFBD>I<EFBFBD>K<EFBFBD><01>
<EFBFBD> <09> <09>Y<>Z<> <09> <09> <09>V<>W<> <09> <09> <09>*<2A>+<2B><18> <0C><1E>D<EFBFBD>"<22>4<EFBFBD> <09>?<3F>3<>D<EFBFBD>*<2A>4<EFBFBD> <09>?<3F>;<3B>H<EFBFBD> <0A>I<EFBFBD>I<EFBFBD>5<><1B>T<EFBFBD>,<2C>/<2F><14>i<EFBFBD><1F>"<22>h<EFBFBD>O<> Q<01> <19>A<EFBFBD> <1D>L<EFBFBD><1F> <0B> <09> <09> <0B><13>2<><<3C>.<2E>@b<>c<>d<><16>%8<><1C><0E>j<EFBFBD>#Q<>\h<>i<>j<>j<><6A>3As
<00> C(<04>C(N)<01>route) <0B>apprr0rDrHrKrOrQrTrgrps r<00>register_cron_routesrssb<00><00> <09>Y<EFBFBD>Y<EFBFBD> <20>!<21> )<29>"<22> )<29> <09>Y<EFBFBD>Y<EFBFBD> <20>6<EFBFBD>(<28>Y<EFBFBD>3<>N<01>4<>N<01>> <09>Y<EFBFBD>Y<EFBFBD>.<2E><15><07>Y<EFBFBD>@<40>+R<01>A<01>+R<01>Z <09>Y<EFBFBD>Y<EFBFBD>.<2E><18>
<EFBFBD>Y<EFBFBD>C<>:<3A>D<01>:<3A>< <09>Y<EFBFBD>Y<EFBFBD>5<><06>x<EFBFBD>Y<EFBFBD>H<>O<01>I<01>O<01>* <09>Y<EFBFBD>Y<EFBFBD>6<>7<> -<2D>8<> -<2D> <09>Y<EFBFBD>Y<EFBFBD>E<>PV<50>x<EFBFBD>Y<EFBFBD>X<>E<01>Y<01>E<01>. <09>Y<EFBFBD>Y<EFBFBD>3<>4<>'<27>5<>'<27> <09>Y<EFBFBD>Y<EFBFBD>%<25>&<26> 3<>'<27> 3<> <09>Y<EFBFBD>Y<EFBFBD><1F>&<26><18>Y<EFBFBD>2<>k<01>3<>kr1N)<0F>__doc__<5F>flaskrr<00>databaser<00>utilsrrrr r
r r rs<00>r1r<00><module>rys(<00><01><04>#<23><1B><02><02><02> pkr1