diff --git a/back/loaders/db.ts b/back/loaders/db.ts index 999ab43be57..8c177b0d332 100644 --- a/back/loaders/db.ts +++ b/back/loaders/db.ts @@ -48,16 +48,18 @@ export default async () => { } catch (error) {} try { await sequelize.query('alter table Crontabs add column sub_id NUMBER'); - } catch (error) { } + } catch (error) {} try { - await sequelize.query('alter table Crontabs add column extra_schedules JSON'); - } catch (error) { } + await sequelize.query( + 'alter table Crontabs add column extra_schedules JSON', + ); + } catch (error) {} try { await sequelize.query('alter table Crontabs add column task_before TEXT'); - } catch (error) { } + } catch (error) {} try { await sequelize.query('alter table Crontabs add column task_after TEXT'); - } catch (error) { } + } catch (error) {} // 2.10-2.11 升级 const cronDbFile = path.join(config.rootPath, 'db/crontab.db'); diff --git a/back/loaders/initData.ts b/back/loaders/initData.ts index 1051220d6c6..0320e4098f1 100644 --- a/back/loaders/initData.ts +++ b/back/loaders/initData.ts @@ -13,10 +13,11 @@ import { AuthDataType, SystemModel } from '../data/system'; import SystemService from '../services/system'; import UserService from '../services/user'; import { writeFile, readFile } from 'fs/promises'; -import { safeJSONParse } from '../config/util'; +import { createRandomString, safeJSONParse } from '../config/util'; import OpenService from '../services/open'; import { shareStore } from '../shared/store'; import Logger from './logger'; +import { AppModel } from '../data/open'; export default async () => { const cronService = Container.get(CronService); @@ -27,6 +28,19 @@ export default async () => { const openService = Container.get(OpenService); // 初始化增加系统配置 + let systemApp = ( + await AppModel.findOne({ + where: { name: 'system' }, + }) + )?.get({ plain: true }); + if (!systemApp) { + systemApp = await AppModel.create({ + name: 'system', + scopes: ['crons', 'system'], + client_id: createRandomString(12, 12), + client_secret: createRandomString(24, 24), + }); + } const [systemConfig] = await SystemModel.findOrCreate({ where: { type: AuthDataType.systemConfig }, }); diff --git a/back/protos/api.proto b/back/protos/api.proto new file mode 100644 index 00000000000..017b0f10877 --- /dev/null +++ b/back/protos/api.proto @@ -0,0 +1,73 @@ +syntax = "proto3"; + +package com.ql.api; + +message EnvItem { + optional int32 id = 1; + optional string name = 2; + optional string value = 3; + optional string remarks = 4; + optional int32 status = 5; + optional int32 position = 6; +} + +message GetEnvsRequest { string searchValue = 1; } + +message CreateEnvRequest { repeated EnvItem envs = 1; } + +message UpdateEnvRequest { EnvItem env = 1; } + +message DeleteEnvsRequest { repeated int32 ids = 1; } + +message MoveEnvRequest { + int32 id = 1; + int32 fromIndex = 2; + int32 toIndex = 3; +} + +message DisableEnvsRequest { repeated int32 ids = 1; } + +message EnableEnvsRequest { repeated int32 ids = 1; } + +message UpdateEnvNamesRequest { + repeated int32 ids = 1; + string name = 2; +} + +message GetEnvByIdRequest { int32 id = 1; } + +message EnvsResponse { + int32 code = 1; + repeated EnvItem data = 2; + optional string message = 3; +} + +message EnvResponse { + int32 code = 1; + EnvItem data = 2; + optional string message = 3; +} + +message Response { + int32 code = 1; + optional string message = 2; +} + +message SystemNotifyRequest { + string title = 1; + string content = 2; +} +message SystemNotifyResponse {} + +service Api { + rpc GetEnvs(GetEnvsRequest) returns (EnvsResponse) {} + rpc CreateEnv(CreateEnvRequest) returns (EnvsResponse) {} + rpc UpdateEnv(UpdateEnvRequest) returns (EnvResponse) {} + rpc DeleteEnvs(DeleteEnvsRequest) returns (Response) {} + rpc MoveEnv(MoveEnvRequest) returns (EnvResponse) {} + rpc DisableEnvs(DisableEnvsRequest) returns (Response) {} + rpc EnableEnvs(EnableEnvsRequest) returns (Response) {} + rpc UpdateEnvNames(UpdateEnvNamesRequest) returns (Response) {} + rpc GetEnvById(GetEnvByIdRequest) returns (EnvResponse) {} + rpc SystemNotify(SystemNotifyRequest) returns (SystemNotifyResponse) {} +} \ No newline at end of file diff --git a/back/protos/api.ts b/back/protos/api.ts new file mode 100644 index 00000000000..596788ca9fb --- /dev/null +++ b/back/protos/api.ts @@ -0,0 +1,1497 @@ +// Code generated by protoc-gen-ts_proto. DO NOT EDIT. +// versions: +// protoc-gen-ts_proto v1.181.2 +// protoc v3.17.3 +// source: back/protos/api.proto + +/* eslint-disable */ +import { + type CallOptions, + ChannelCredentials, + Client, + type ClientOptions, + type ClientUnaryCall, + type handleUnaryCall, + makeGenericClientConstructor, + Metadata, + type ServiceError, + type UntypedServiceImplementation, +} from "@grpc/grpc-js"; +import _m0 from "protobufjs/minimal"; + +export const protobufPackage = "com.ql.api"; + +export interface EnvItem { + id?: number | undefined; + name?: string | undefined; + value?: string | undefined; + remarks?: string | undefined; + status?: number | undefined; + position?: number | undefined; +} + +export interface GetEnvsRequest { + searchValue: string; +} + +export interface CreateEnvRequest { + envs: EnvItem[]; +} + +export interface UpdateEnvRequest { + env: EnvItem | undefined; +} + +export interface DeleteEnvsRequest { + ids: number[]; +} + +export interface MoveEnvRequest { + id: number; + fromIndex: number; + toIndex: number; +} + +export interface DisableEnvsRequest { + ids: number[]; +} + +export interface EnableEnvsRequest { + ids: number[]; +} + +export interface UpdateEnvNamesRequest { + ids: number[]; + name: string; +} + +export interface GetEnvByIdRequest { + id: number; +} + +export interface EnvsResponse { + code: number; + data: EnvItem[]; + message?: string | undefined; +} + +export interface EnvResponse { + code: number; + data: EnvItem | undefined; + message?: string | undefined; +} + +export interface Response { + code: number; + message?: string | undefined; +} + +export interface SystemNotifyRequest { + title: string; + content: string; +} + +export interface SystemNotifyResponse { +} + +function createBaseEnvItem(): EnvItem { + return { + id: undefined, + name: undefined, + value: undefined, + remarks: undefined, + status: undefined, + position: undefined, + }; +} + +export const EnvItem = { + encode(message: EnvItem, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.id !== undefined) { + writer.uint32(8).int32(message.id); + } + if (message.name !== undefined) { + writer.uint32(18).string(message.name); + } + if (message.value !== undefined) { + writer.uint32(26).string(message.value); + } + if (message.remarks !== undefined) { + writer.uint32(34).string(message.remarks); + } + if (message.status !== undefined) { + writer.uint32(40).int32(message.status); + } + if (message.position !== undefined) { + writer.uint32(48).int32(message.position); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): EnvItem { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseEnvItem(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 8) { + break; + } + + message.id = reader.int32(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.name = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.value = reader.string(); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.remarks = reader.string(); + continue; + case 5: + if (tag !== 40) { + break; + } + + message.status = reader.int32(); + continue; + case 6: + if (tag !== 48) { + break; + } + + message.position = reader.int32(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): EnvItem { + return { + id: isSet(object.id) ? globalThis.Number(object.id) : undefined, + name: isSet(object.name) ? globalThis.String(object.name) : undefined, + value: isSet(object.value) ? globalThis.String(object.value) : undefined, + remarks: isSet(object.remarks) ? globalThis.String(object.remarks) : undefined, + status: isSet(object.status) ? globalThis.Number(object.status) : undefined, + position: isSet(object.position) ? globalThis.Number(object.position) : undefined, + }; + }, + + toJSON(message: EnvItem): unknown { + const obj: any = {}; + if (message.id !== undefined) { + obj.id = Math.round(message.id); + } + if (message.name !== undefined) { + obj.name = message.name; + } + if (message.value !== undefined) { + obj.value = message.value; + } + if (message.remarks !== undefined) { + obj.remarks = message.remarks; + } + if (message.status !== undefined) { + obj.status = Math.round(message.status); + } + if (message.position !== undefined) { + obj.position = Math.round(message.position); + } + return obj; + }, + + create, I>>(base?: I): EnvItem { + return EnvItem.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): EnvItem { + const message = createBaseEnvItem(); + message.id = object.id ?? undefined; + message.name = object.name ?? undefined; + message.value = object.value ?? undefined; + message.remarks = object.remarks ?? undefined; + message.status = object.status ?? undefined; + message.position = object.position ?? undefined; + return message; + }, +}; + +function createBaseGetEnvsRequest(): GetEnvsRequest { + return { searchValue: "" }; +} + +export const GetEnvsRequest = { + encode(message: GetEnvsRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.searchValue !== "") { + writer.uint32(10).string(message.searchValue); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): GetEnvsRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseGetEnvsRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.searchValue = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): GetEnvsRequest { + return { searchValue: isSet(object.searchValue) ? globalThis.String(object.searchValue) : "" }; + }, + + toJSON(message: GetEnvsRequest): unknown { + const obj: any = {}; + if (message.searchValue !== "") { + obj.searchValue = message.searchValue; + } + return obj; + }, + + create, I>>(base?: I): GetEnvsRequest { + return GetEnvsRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): GetEnvsRequest { + const message = createBaseGetEnvsRequest(); + message.searchValue = object.searchValue ?? ""; + return message; + }, +}; + +function createBaseCreateEnvRequest(): CreateEnvRequest { + return { envs: [] }; +} + +export const CreateEnvRequest = { + encode(message: CreateEnvRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.envs) { + EnvItem.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): CreateEnvRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCreateEnvRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.envs.push(EnvItem.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CreateEnvRequest { + return { envs: globalThis.Array.isArray(object?.envs) ? object.envs.map((e: any) => EnvItem.fromJSON(e)) : [] }; + }, + + toJSON(message: CreateEnvRequest): unknown { + const obj: any = {}; + if (message.envs?.length) { + obj.envs = message.envs.map((e) => EnvItem.toJSON(e)); + } + return obj; + }, + + create, I>>(base?: I): CreateEnvRequest { + return CreateEnvRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): CreateEnvRequest { + const message = createBaseCreateEnvRequest(); + message.envs = object.envs?.map((e) => EnvItem.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseUpdateEnvRequest(): UpdateEnvRequest { + return { env: undefined }; +} + +export const UpdateEnvRequest = { + encode(message: UpdateEnvRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.env !== undefined) { + EnvItem.encode(message.env, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateEnvRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateEnvRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.env = EnvItem.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateEnvRequest { + return { env: isSet(object.env) ? EnvItem.fromJSON(object.env) : undefined }; + }, + + toJSON(message: UpdateEnvRequest): unknown { + const obj: any = {}; + if (message.env !== undefined) { + obj.env = EnvItem.toJSON(message.env); + } + return obj; + }, + + create, I>>(base?: I): UpdateEnvRequest { + return UpdateEnvRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): UpdateEnvRequest { + const message = createBaseUpdateEnvRequest(); + message.env = (object.env !== undefined && object.env !== null) ? EnvItem.fromPartial(object.env) : undefined; + return message; + }, +}; + +function createBaseDeleteEnvsRequest(): DeleteEnvsRequest { + return { ids: [] }; +} + +export const DeleteEnvsRequest = { + encode(message: DeleteEnvsRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + writer.uint32(10).fork(); + for (const v of message.ids) { + writer.int32(v); + } + writer.ldelim(); + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): DeleteEnvsRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseDeleteEnvsRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag === 8) { + message.ids.push(reader.int32()); + + continue; + } + + if (tag === 10) { + const end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) { + message.ids.push(reader.int32()); + } + + continue; + } + + break; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): DeleteEnvsRequest { + return { ids: globalThis.Array.isArray(object?.ids) ? object.ids.map((e: any) => globalThis.Number(e)) : [] }; + }, + + toJSON(message: DeleteEnvsRequest): unknown { + const obj: any = {}; + if (message.ids?.length) { + obj.ids = message.ids.map((e) => Math.round(e)); + } + return obj; + }, + + create, I>>(base?: I): DeleteEnvsRequest { + return DeleteEnvsRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): DeleteEnvsRequest { + const message = createBaseDeleteEnvsRequest(); + message.ids = object.ids?.map((e) => e) || []; + return message; + }, +}; + +function createBaseMoveEnvRequest(): MoveEnvRequest { + return { id: 0, fromIndex: 0, toIndex: 0 }; +} + +export const MoveEnvRequest = { + encode(message: MoveEnvRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.id !== 0) { + writer.uint32(8).int32(message.id); + } + if (message.fromIndex !== 0) { + writer.uint32(16).int32(message.fromIndex); + } + if (message.toIndex !== 0) { + writer.uint32(24).int32(message.toIndex); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MoveEnvRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMoveEnvRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 8) { + break; + } + + message.id = reader.int32(); + continue; + case 2: + if (tag !== 16) { + break; + } + + message.fromIndex = reader.int32(); + continue; + case 3: + if (tag !== 24) { + break; + } + + message.toIndex = reader.int32(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): MoveEnvRequest { + return { + id: isSet(object.id) ? globalThis.Number(object.id) : 0, + fromIndex: isSet(object.fromIndex) ? globalThis.Number(object.fromIndex) : 0, + toIndex: isSet(object.toIndex) ? globalThis.Number(object.toIndex) : 0, + }; + }, + + toJSON(message: MoveEnvRequest): unknown { + const obj: any = {}; + if (message.id !== 0) { + obj.id = Math.round(message.id); + } + if (message.fromIndex !== 0) { + obj.fromIndex = Math.round(message.fromIndex); + } + if (message.toIndex !== 0) { + obj.toIndex = Math.round(message.toIndex); + } + return obj; + }, + + create, I>>(base?: I): MoveEnvRequest { + return MoveEnvRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): MoveEnvRequest { + const message = createBaseMoveEnvRequest(); + message.id = object.id ?? 0; + message.fromIndex = object.fromIndex ?? 0; + message.toIndex = object.toIndex ?? 0; + return message; + }, +}; + +function createBaseDisableEnvsRequest(): DisableEnvsRequest { + return { ids: [] }; +} + +export const DisableEnvsRequest = { + encode(message: DisableEnvsRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + writer.uint32(10).fork(); + for (const v of message.ids) { + writer.int32(v); + } + writer.ldelim(); + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): DisableEnvsRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseDisableEnvsRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag === 8) { + message.ids.push(reader.int32()); + + continue; + } + + if (tag === 10) { + const end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) { + message.ids.push(reader.int32()); + } + + continue; + } + + break; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): DisableEnvsRequest { + return { ids: globalThis.Array.isArray(object?.ids) ? object.ids.map((e: any) => globalThis.Number(e)) : [] }; + }, + + toJSON(message: DisableEnvsRequest): unknown { + const obj: any = {}; + if (message.ids?.length) { + obj.ids = message.ids.map((e) => Math.round(e)); + } + return obj; + }, + + create, I>>(base?: I): DisableEnvsRequest { + return DisableEnvsRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): DisableEnvsRequest { + const message = createBaseDisableEnvsRequest(); + message.ids = object.ids?.map((e) => e) || []; + return message; + }, +}; + +function createBaseEnableEnvsRequest(): EnableEnvsRequest { + return { ids: [] }; +} + +export const EnableEnvsRequest = { + encode(message: EnableEnvsRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + writer.uint32(10).fork(); + for (const v of message.ids) { + writer.int32(v); + } + writer.ldelim(); + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): EnableEnvsRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseEnableEnvsRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag === 8) { + message.ids.push(reader.int32()); + + continue; + } + + if (tag === 10) { + const end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) { + message.ids.push(reader.int32()); + } + + continue; + } + + break; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): EnableEnvsRequest { + return { ids: globalThis.Array.isArray(object?.ids) ? object.ids.map((e: any) => globalThis.Number(e)) : [] }; + }, + + toJSON(message: EnableEnvsRequest): unknown { + const obj: any = {}; + if (message.ids?.length) { + obj.ids = message.ids.map((e) => Math.round(e)); + } + return obj; + }, + + create, I>>(base?: I): EnableEnvsRequest { + return EnableEnvsRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): EnableEnvsRequest { + const message = createBaseEnableEnvsRequest(); + message.ids = object.ids?.map((e) => e) || []; + return message; + }, +}; + +function createBaseUpdateEnvNamesRequest(): UpdateEnvNamesRequest { + return { ids: [], name: "" }; +} + +export const UpdateEnvNamesRequest = { + encode(message: UpdateEnvNamesRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + writer.uint32(10).fork(); + for (const v of message.ids) { + writer.int32(v); + } + writer.ldelim(); + if (message.name !== "") { + writer.uint32(18).string(message.name); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateEnvNamesRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateEnvNamesRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag === 8) { + message.ids.push(reader.int32()); + + continue; + } + + if (tag === 10) { + const end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) { + message.ids.push(reader.int32()); + } + + continue; + } + + break; + case 2: + if (tag !== 18) { + break; + } + + message.name = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateEnvNamesRequest { + return { + ids: globalThis.Array.isArray(object?.ids) ? object.ids.map((e: any) => globalThis.Number(e)) : [], + name: isSet(object.name) ? globalThis.String(object.name) : "", + }; + }, + + toJSON(message: UpdateEnvNamesRequest): unknown { + const obj: any = {}; + if (message.ids?.length) { + obj.ids = message.ids.map((e) => Math.round(e)); + } + if (message.name !== "") { + obj.name = message.name; + } + return obj; + }, + + create, I>>(base?: I): UpdateEnvNamesRequest { + return UpdateEnvNamesRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): UpdateEnvNamesRequest { + const message = createBaseUpdateEnvNamesRequest(); + message.ids = object.ids?.map((e) => e) || []; + message.name = object.name ?? ""; + return message; + }, +}; + +function createBaseGetEnvByIdRequest(): GetEnvByIdRequest { + return { id: 0 }; +} + +export const GetEnvByIdRequest = { + encode(message: GetEnvByIdRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.id !== 0) { + writer.uint32(8).int32(message.id); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): GetEnvByIdRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseGetEnvByIdRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 8) { + break; + } + + message.id = reader.int32(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): GetEnvByIdRequest { + return { id: isSet(object.id) ? globalThis.Number(object.id) : 0 }; + }, + + toJSON(message: GetEnvByIdRequest): unknown { + const obj: any = {}; + if (message.id !== 0) { + obj.id = Math.round(message.id); + } + return obj; + }, + + create, I>>(base?: I): GetEnvByIdRequest { + return GetEnvByIdRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): GetEnvByIdRequest { + const message = createBaseGetEnvByIdRequest(); + message.id = object.id ?? 0; + return message; + }, +}; + +function createBaseEnvsResponse(): EnvsResponse { + return { code: 0, data: [], message: undefined }; +} + +export const EnvsResponse = { + encode(message: EnvsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.code !== 0) { + writer.uint32(8).int32(message.code); + } + for (const v of message.data) { + EnvItem.encode(v!, writer.uint32(18).fork()).ldelim(); + } + if (message.message !== undefined) { + writer.uint32(26).string(message.message); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): EnvsResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseEnvsResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 8) { + break; + } + + message.code = reader.int32(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.data.push(EnvItem.decode(reader, reader.uint32())); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.message = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): EnvsResponse { + return { + code: isSet(object.code) ? globalThis.Number(object.code) : 0, + data: globalThis.Array.isArray(object?.data) ? object.data.map((e: any) => EnvItem.fromJSON(e)) : [], + message: isSet(object.message) ? globalThis.String(object.message) : undefined, + }; + }, + + toJSON(message: EnvsResponse): unknown { + const obj: any = {}; + if (message.code !== 0) { + obj.code = Math.round(message.code); + } + if (message.data?.length) { + obj.data = message.data.map((e) => EnvItem.toJSON(e)); + } + if (message.message !== undefined) { + obj.message = message.message; + } + return obj; + }, + + create, I>>(base?: I): EnvsResponse { + return EnvsResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): EnvsResponse { + const message = createBaseEnvsResponse(); + message.code = object.code ?? 0; + message.data = object.data?.map((e) => EnvItem.fromPartial(e)) || []; + message.message = object.message ?? undefined; + return message; + }, +}; + +function createBaseEnvResponse(): EnvResponse { + return { code: 0, data: undefined, message: undefined }; +} + +export const EnvResponse = { + encode(message: EnvResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.code !== 0) { + writer.uint32(8).int32(message.code); + } + if (message.data !== undefined) { + EnvItem.encode(message.data, writer.uint32(18).fork()).ldelim(); + } + if (message.message !== undefined) { + writer.uint32(26).string(message.message); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): EnvResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseEnvResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 8) { + break; + } + + message.code = reader.int32(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.data = EnvItem.decode(reader, reader.uint32()); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.message = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): EnvResponse { + return { + code: isSet(object.code) ? globalThis.Number(object.code) : 0, + data: isSet(object.data) ? EnvItem.fromJSON(object.data) : undefined, + message: isSet(object.message) ? globalThis.String(object.message) : undefined, + }; + }, + + toJSON(message: EnvResponse): unknown { + const obj: any = {}; + if (message.code !== 0) { + obj.code = Math.round(message.code); + } + if (message.data !== undefined) { + obj.data = EnvItem.toJSON(message.data); + } + if (message.message !== undefined) { + obj.message = message.message; + } + return obj; + }, + + create, I>>(base?: I): EnvResponse { + return EnvResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): EnvResponse { + const message = createBaseEnvResponse(); + message.code = object.code ?? 0; + message.data = (object.data !== undefined && object.data !== null) ? EnvItem.fromPartial(object.data) : undefined; + message.message = object.message ?? undefined; + return message; + }, +}; + +function createBaseResponse(): Response { + return { code: 0, message: undefined }; +} + +export const Response = { + encode(message: Response, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.code !== 0) { + writer.uint32(8).int32(message.code); + } + if (message.message !== undefined) { + writer.uint32(18).string(message.message); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Response { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 8) { + break; + } + + message.code = reader.int32(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.message = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Response { + return { + code: isSet(object.code) ? globalThis.Number(object.code) : 0, + message: isSet(object.message) ? globalThis.String(object.message) : undefined, + }; + }, + + toJSON(message: Response): unknown { + const obj: any = {}; + if (message.code !== 0) { + obj.code = Math.round(message.code); + } + if (message.message !== undefined) { + obj.message = message.message; + } + return obj; + }, + + create, I>>(base?: I): Response { + return Response.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): Response { + const message = createBaseResponse(); + message.code = object.code ?? 0; + message.message = object.message ?? undefined; + return message; + }, +}; + +function createBaseSystemNotifyRequest(): SystemNotifyRequest { + return { title: "", content: "" }; +} + +export const SystemNotifyRequest = { + encode(message: SystemNotifyRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.title !== "") { + writer.uint32(10).string(message.title); + } + if (message.content !== "") { + writer.uint32(18).string(message.content); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): SystemNotifyRequest { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSystemNotifyRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.title = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.content = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): SystemNotifyRequest { + return { + title: isSet(object.title) ? globalThis.String(object.title) : "", + content: isSet(object.content) ? globalThis.String(object.content) : "", + }; + }, + + toJSON(message: SystemNotifyRequest): unknown { + const obj: any = {}; + if (message.title !== "") { + obj.title = message.title; + } + if (message.content !== "") { + obj.content = message.content; + } + return obj; + }, + + create, I>>(base?: I): SystemNotifyRequest { + return SystemNotifyRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): SystemNotifyRequest { + const message = createBaseSystemNotifyRequest(); + message.title = object.title ?? ""; + message.content = object.content ?? ""; + return message; + }, +}; + +function createBaseSystemNotifyResponse(): SystemNotifyResponse { + return {}; +} + +export const SystemNotifyResponse = { + encode(_: SystemNotifyResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): SystemNotifyResponse { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSystemNotifyResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(_: any): SystemNotifyResponse { + return {}; + }, + + toJSON(_: SystemNotifyResponse): unknown { + const obj: any = {}; + return obj; + }, + + create, I>>(base?: I): SystemNotifyResponse { + return SystemNotifyResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(_: I): SystemNotifyResponse { + const message = createBaseSystemNotifyResponse(); + return message; + }, +}; + +export type ApiService = typeof ApiService; +export const ApiService = { + getEnvs: { + path: "/com.ql.api.Api/GetEnvs", + requestStream: false, + responseStream: false, + requestSerialize: (value: GetEnvsRequest) => Buffer.from(GetEnvsRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => GetEnvsRequest.decode(value), + responseSerialize: (value: EnvsResponse) => Buffer.from(EnvsResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => EnvsResponse.decode(value), + }, + createEnv: { + path: "/com.ql.api.Api/CreateEnv", + requestStream: false, + responseStream: false, + requestSerialize: (value: CreateEnvRequest) => Buffer.from(CreateEnvRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => CreateEnvRequest.decode(value), + responseSerialize: (value: EnvsResponse) => Buffer.from(EnvsResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => EnvsResponse.decode(value), + }, + updateEnv: { + path: "/com.ql.api.Api/UpdateEnv", + requestStream: false, + responseStream: false, + requestSerialize: (value: UpdateEnvRequest) => Buffer.from(UpdateEnvRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => UpdateEnvRequest.decode(value), + responseSerialize: (value: EnvResponse) => Buffer.from(EnvResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => EnvResponse.decode(value), + }, + deleteEnvs: { + path: "/com.ql.api.Api/DeleteEnvs", + requestStream: false, + responseStream: false, + requestSerialize: (value: DeleteEnvsRequest) => Buffer.from(DeleteEnvsRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => DeleteEnvsRequest.decode(value), + responseSerialize: (value: Response) => Buffer.from(Response.encode(value).finish()), + responseDeserialize: (value: Buffer) => Response.decode(value), + }, + moveEnv: { + path: "/com.ql.api.Api/MoveEnv", + requestStream: false, + responseStream: false, + requestSerialize: (value: MoveEnvRequest) => Buffer.from(MoveEnvRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => MoveEnvRequest.decode(value), + responseSerialize: (value: EnvResponse) => Buffer.from(EnvResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => EnvResponse.decode(value), + }, + disableEnvs: { + path: "/com.ql.api.Api/DisableEnvs", + requestStream: false, + responseStream: false, + requestSerialize: (value: DisableEnvsRequest) => Buffer.from(DisableEnvsRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => DisableEnvsRequest.decode(value), + responseSerialize: (value: Response) => Buffer.from(Response.encode(value).finish()), + responseDeserialize: (value: Buffer) => Response.decode(value), + }, + enableEnvs: { + path: "/com.ql.api.Api/EnableEnvs", + requestStream: false, + responseStream: false, + requestSerialize: (value: EnableEnvsRequest) => Buffer.from(EnableEnvsRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => EnableEnvsRequest.decode(value), + responseSerialize: (value: Response) => Buffer.from(Response.encode(value).finish()), + responseDeserialize: (value: Buffer) => Response.decode(value), + }, + updateEnvNames: { + path: "/com.ql.api.Api/UpdateEnvNames", + requestStream: false, + responseStream: false, + requestSerialize: (value: UpdateEnvNamesRequest) => Buffer.from(UpdateEnvNamesRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => UpdateEnvNamesRequest.decode(value), + responseSerialize: (value: Response) => Buffer.from(Response.encode(value).finish()), + responseDeserialize: (value: Buffer) => Response.decode(value), + }, + getEnvById: { + path: "/com.ql.api.Api/GetEnvById", + requestStream: false, + responseStream: false, + requestSerialize: (value: GetEnvByIdRequest) => Buffer.from(GetEnvByIdRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => GetEnvByIdRequest.decode(value), + responseSerialize: (value: EnvResponse) => Buffer.from(EnvResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => EnvResponse.decode(value), + }, + systemNotify: { + path: "/com.ql.api.Api/SystemNotify", + requestStream: false, + responseStream: false, + requestSerialize: (value: SystemNotifyRequest) => Buffer.from(SystemNotifyRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => SystemNotifyRequest.decode(value), + responseSerialize: (value: SystemNotifyResponse) => Buffer.from(SystemNotifyResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => SystemNotifyResponse.decode(value), + }, +} as const; + +export interface ApiServer extends UntypedServiceImplementation { + getEnvs: handleUnaryCall; + createEnv: handleUnaryCall; + updateEnv: handleUnaryCall; + deleteEnvs: handleUnaryCall; + moveEnv: handleUnaryCall; + disableEnvs: handleUnaryCall; + enableEnvs: handleUnaryCall; + updateEnvNames: handleUnaryCall; + getEnvById: handleUnaryCall; + systemNotify: handleUnaryCall; +} + +export interface ApiClient extends Client { + getEnvs( + request: GetEnvsRequest, + callback: (error: ServiceError | null, response: EnvsResponse) => void, + ): ClientUnaryCall; + getEnvs( + request: GetEnvsRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: EnvsResponse) => void, + ): ClientUnaryCall; + getEnvs( + request: GetEnvsRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: EnvsResponse) => void, + ): ClientUnaryCall; + createEnv( + request: CreateEnvRequest, + callback: (error: ServiceError | null, response: EnvsResponse) => void, + ): ClientUnaryCall; + createEnv( + request: CreateEnvRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: EnvsResponse) => void, + ): ClientUnaryCall; + createEnv( + request: CreateEnvRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: EnvsResponse) => void, + ): ClientUnaryCall; + updateEnv( + request: UpdateEnvRequest, + callback: (error: ServiceError | null, response: EnvResponse) => void, + ): ClientUnaryCall; + updateEnv( + request: UpdateEnvRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: EnvResponse) => void, + ): ClientUnaryCall; + updateEnv( + request: UpdateEnvRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: EnvResponse) => void, + ): ClientUnaryCall; + deleteEnvs( + request: DeleteEnvsRequest, + callback: (error: ServiceError | null, response: Response) => void, + ): ClientUnaryCall; + deleteEnvs( + request: DeleteEnvsRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: Response) => void, + ): ClientUnaryCall; + deleteEnvs( + request: DeleteEnvsRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: Response) => void, + ): ClientUnaryCall; + moveEnv( + request: MoveEnvRequest, + callback: (error: ServiceError | null, response: EnvResponse) => void, + ): ClientUnaryCall; + moveEnv( + request: MoveEnvRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: EnvResponse) => void, + ): ClientUnaryCall; + moveEnv( + request: MoveEnvRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: EnvResponse) => void, + ): ClientUnaryCall; + disableEnvs( + request: DisableEnvsRequest, + callback: (error: ServiceError | null, response: Response) => void, + ): ClientUnaryCall; + disableEnvs( + request: DisableEnvsRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: Response) => void, + ): ClientUnaryCall; + disableEnvs( + request: DisableEnvsRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: Response) => void, + ): ClientUnaryCall; + enableEnvs( + request: EnableEnvsRequest, + callback: (error: ServiceError | null, response: Response) => void, + ): ClientUnaryCall; + enableEnvs( + request: EnableEnvsRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: Response) => void, + ): ClientUnaryCall; + enableEnvs( + request: EnableEnvsRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: Response) => void, + ): ClientUnaryCall; + updateEnvNames( + request: UpdateEnvNamesRequest, + callback: (error: ServiceError | null, response: Response) => void, + ): ClientUnaryCall; + updateEnvNames( + request: UpdateEnvNamesRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: Response) => void, + ): ClientUnaryCall; + updateEnvNames( + request: UpdateEnvNamesRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: Response) => void, + ): ClientUnaryCall; + getEnvById( + request: GetEnvByIdRequest, + callback: (error: ServiceError | null, response: EnvResponse) => void, + ): ClientUnaryCall; + getEnvById( + request: GetEnvByIdRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: EnvResponse) => void, + ): ClientUnaryCall; + getEnvById( + request: GetEnvByIdRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: EnvResponse) => void, + ): ClientUnaryCall; + systemNotify( + request: SystemNotifyRequest, + callback: (error: ServiceError | null, response: SystemNotifyResponse) => void, + ): ClientUnaryCall; + systemNotify( + request: SystemNotifyRequest, + metadata: Metadata, + callback: (error: ServiceError | null, response: SystemNotifyResponse) => void, + ): ClientUnaryCall; + systemNotify( + request: SystemNotifyRequest, + metadata: Metadata, + options: Partial, + callback: (error: ServiceError | null, response: SystemNotifyResponse) => void, + ): ClientUnaryCall; +} + +export const ApiClient = makeGenericClientConstructor(ApiService, "com.ql.api.Api") as unknown as { + new (address: string, credentials: ChannelCredentials, options?: Partial): ApiClient; + service: typeof ApiService; + serviceName: string; +}; + +type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; + +export type DeepPartial = T extends Builtin ? T + : T extends globalThis.Array ? globalThis.Array> + : T extends ReadonlyArray ? ReadonlyArray> + : T extends {} ? { [K in keyof T]?: DeepPartial } + : Partial; + +type KeysOfUnion = T extends T ? keyof T : never; +export type Exact = P extends Builtin ? P + : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; + +function isSet(value: any): boolean { + return value !== null && value !== undefined; +} diff --git a/back/protos/cron.ts b/back/protos/cron.ts index fe74d148734..d0491c1d277 100644 --- a/back/protos/cron.ts +++ b/back/protos/cron.ts @@ -1,15 +1,21 @@ +// Code generated by protoc-gen-ts_proto. DO NOT EDIT. +// versions: +// protoc-gen-ts_proto v1.181.2 +// protoc v3.17.3 +// source: back/protos/cron.proto + /* eslint-disable */ import { - CallOptions, + type CallOptions, ChannelCredentials, Client, - ClientOptions, - ClientUnaryCall, - handleUnaryCall, + type ClientOptions, + type ClientUnaryCall, + type handleUnaryCall, makeGenericClientConstructor, Metadata, - ServiceError, - UntypedServiceImplementation, + type ServiceError, + type UntypedServiceImplementation, } from "@grpc/grpc-js"; import _m0 from "protobufjs/minimal"; @@ -77,19 +83,20 @@ export const ISchedule = { }, fromJSON(object: any): ISchedule { - return { schedule: isSet(object.schedule) ? String(object.schedule) : "" }; + return { schedule: isSet(object.schedule) ? globalThis.String(object.schedule) : "" }; }, toJSON(message: ISchedule): unknown { const obj: any = {}; - message.schedule !== undefined && (obj.schedule = message.schedule); + if (message.schedule !== "") { + obj.schedule = message.schedule; + } return obj; }, create, I>>(base?: I): ISchedule { - return ISchedule.fromPartial(base ?? {}); + return ISchedule.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): ISchedule { const message = createBaseISchedule(); message.schedule = object.schedule ?? ""; @@ -174,34 +181,39 @@ export const ICron = { fromJSON(object: any): ICron { return { - id: isSet(object.id) ? String(object.id) : "", - schedule: isSet(object.schedule) ? String(object.schedule) : "", - command: isSet(object.command) ? String(object.command) : "", - extraSchedules: Array.isArray(object?.extraSchedules) + id: isSet(object.id) ? globalThis.String(object.id) : "", + schedule: isSet(object.schedule) ? globalThis.String(object.schedule) : "", + command: isSet(object.command) ? globalThis.String(object.command) : "", + extraSchedules: globalThis.Array.isArray(object?.extraSchedules) ? object.extraSchedules.map((e: any) => ISchedule.fromJSON(e)) : [], - name: isSet(object.name) ? String(object.name) : "", + name: isSet(object.name) ? globalThis.String(object.name) : "", }; }, toJSON(message: ICron): unknown { const obj: any = {}; - message.id !== undefined && (obj.id = message.id); - message.schedule !== undefined && (obj.schedule = message.schedule); - message.command !== undefined && (obj.command = message.command); - if (message.extraSchedules) { - obj.extraSchedules = message.extraSchedules.map((e) => e ? ISchedule.toJSON(e) : undefined); - } else { - obj.extraSchedules = []; + if (message.id !== "") { + obj.id = message.id; + } + if (message.schedule !== "") { + obj.schedule = message.schedule; + } + if (message.command !== "") { + obj.command = message.command; + } + if (message.extraSchedules?.length) { + obj.extraSchedules = message.extraSchedules.map((e) => ISchedule.toJSON(e)); + } + if (message.name !== "") { + obj.name = message.name; } - message.name !== undefined && (obj.name = message.name); return obj; }, create, I>>(base?: I): ICron { - return ICron.fromPartial(base ?? {}); + return ICron.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): ICron { const message = createBaseICron(); message.id = object.id ?? ""; @@ -249,23 +261,20 @@ export const AddCronRequest = { }, fromJSON(object: any): AddCronRequest { - return { crons: Array.isArray(object?.crons) ? object.crons.map((e: any) => ICron.fromJSON(e)) : [] }; + return { crons: globalThis.Array.isArray(object?.crons) ? object.crons.map((e: any) => ICron.fromJSON(e)) : [] }; }, toJSON(message: AddCronRequest): unknown { const obj: any = {}; - if (message.crons) { - obj.crons = message.crons.map((e) => e ? ICron.toJSON(e) : undefined); - } else { - obj.crons = []; + if (message.crons?.length) { + obj.crons = message.crons.map((e) => ICron.toJSON(e)); } return obj; }, create, I>>(base?: I): AddCronRequest { - return AddCronRequest.fromPartial(base ?? {}); + return AddCronRequest.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): AddCronRequest { const message = createBaseAddCronRequest(); message.crons = object.crons?.map((e) => ICron.fromPartial(e)) || []; @@ -308,9 +317,8 @@ export const AddCronResponse = { }, create, I>>(base?: I): AddCronResponse { - return AddCronResponse.fromPartial(base ?? {}); + return AddCronResponse.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(_: I): AddCronResponse { const message = createBaseAddCronResponse(); return message; @@ -353,23 +361,20 @@ export const DeleteCronRequest = { }, fromJSON(object: any): DeleteCronRequest { - return { ids: Array.isArray(object?.ids) ? object.ids.map((e: any) => String(e)) : [] }; + return { ids: globalThis.Array.isArray(object?.ids) ? object.ids.map((e: any) => globalThis.String(e)) : [] }; }, toJSON(message: DeleteCronRequest): unknown { const obj: any = {}; - if (message.ids) { - obj.ids = message.ids.map((e) => e); - } else { - obj.ids = []; + if (message.ids?.length) { + obj.ids = message.ids; } return obj; }, create, I>>(base?: I): DeleteCronRequest { - return DeleteCronRequest.fromPartial(base ?? {}); + return DeleteCronRequest.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): DeleteCronRequest { const message = createBaseDeleteCronRequest(); message.ids = object.ids?.map((e) => e) || []; @@ -412,9 +417,8 @@ export const DeleteCronResponse = { }, create, I>>(base?: I): DeleteCronResponse { - return DeleteCronResponse.fromPartial(base ?? {}); + return DeleteCronResponse.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(_: I): DeleteCronResponse { const message = createBaseDeleteCronResponse(); return message; @@ -484,12 +488,14 @@ export interface CronClient extends Client { export const CronClient = makeGenericClientConstructor(CronService, "com.ql.cron.Cron") as unknown as { new (address: string, credentials: ChannelCredentials, options?: Partial): CronClient; service: typeof CronService; + serviceName: string; }; type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; export type DeepPartial = T extends Builtin ? T - : T extends Array ? Array> : T extends ReadonlyArray ? ReadonlyArray> + : T extends globalThis.Array ? globalThis.Array> + : T extends ReadonlyArray ? ReadonlyArray> : T extends {} ? { [K in keyof T]?: DeepPartial } : Partial; diff --git a/back/protos/health.ts b/back/protos/health.ts index 9266b2e90e8..b0360d6b83f 100644 --- a/back/protos/health.ts +++ b/back/protos/health.ts @@ -1,17 +1,23 @@ +// Code generated by protoc-gen-ts_proto. DO NOT EDIT. +// versions: +// protoc-gen-ts_proto v1.181.2 +// protoc v3.17.3 +// source: back/protos/health.proto + /* eslint-disable */ import { - CallOptions, + type CallOptions, ChannelCredentials, Client, - ClientOptions, + type ClientOptions, ClientReadableStream, - ClientUnaryCall, + type ClientUnaryCall, handleServerStreamingCall, - handleUnaryCall, + type handleUnaryCall, makeGenericClientConstructor, Metadata, - ServiceError, - UntypedServiceImplementation, + type ServiceError, + type UntypedServiceImplementation, } from "@grpc/grpc-js"; import _m0 from "protobufjs/minimal"; @@ -106,19 +112,20 @@ export const HealthCheckRequest = { }, fromJSON(object: any): HealthCheckRequest { - return { service: isSet(object.service) ? String(object.service) : "" }; + return { service: isSet(object.service) ? globalThis.String(object.service) : "" }; }, toJSON(message: HealthCheckRequest): unknown { const obj: any = {}; - message.service !== undefined && (obj.service = message.service); + if (message.service !== "") { + obj.service = message.service; + } return obj; }, create, I>>(base?: I): HealthCheckRequest { - return HealthCheckRequest.fromPartial(base ?? {}); + return HealthCheckRequest.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): HealthCheckRequest { const message = createBaseHealthCheckRequest(); message.service = object.service ?? ""; @@ -167,14 +174,15 @@ export const HealthCheckResponse = { toJSON(message: HealthCheckResponse): unknown { const obj: any = {}; - message.status !== undefined && (obj.status = healthCheckResponse_ServingStatusToJSON(message.status)); + if (message.status !== 0) { + obj.status = healthCheckResponse_ServingStatusToJSON(message.status); + } return obj; }, create, I>>(base?: I): HealthCheckResponse { - return HealthCheckResponse.fromPartial(base ?? {}); + return HealthCheckResponse.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): HealthCheckResponse { const message = createBaseHealthCheckResponse(); message.status = object.status ?? 0; @@ -236,12 +244,14 @@ export interface HealthClient extends Client { export const HealthClient = makeGenericClientConstructor(HealthService, "com.ql.health.Health") as unknown as { new (address: string, credentials: ChannelCredentials, options?: Partial): HealthClient; service: typeof HealthService; + serviceName: string; }; type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; export type DeepPartial = T extends Builtin ? T - : T extends Array ? Array> : T extends ReadonlyArray ? ReadonlyArray> + : T extends globalThis.Array ? globalThis.Array> + : T extends ReadonlyArray ? ReadonlyArray> : T extends {} ? { [K in keyof T]?: DeepPartial } : Partial; diff --git a/back/schedule/api.ts b/back/schedule/api.ts new file mode 100644 index 00000000000..e1237bd048f --- /dev/null +++ b/back/schedule/api.ts @@ -0,0 +1,172 @@ +import 'reflect-metadata'; +import { Container } from 'typedi'; +import EnvService from '../services/env'; +import { sendUnaryData, ServerUnaryCall } from '@grpc/grpc-js'; +import { + CreateEnvRequest, + DeleteEnvsRequest, + DisableEnvsRequest, + EnableEnvsRequest, + EnvItem, + EnvResponse, + EnvsResponse, + GetEnvByIdRequest, + GetEnvsRequest, + MoveEnvRequest, + Response, + SystemNotifyRequest, + SystemNotifyResponse, + UpdateEnvNamesRequest, + UpdateEnvRequest, +} from '../protos/api'; +import LoggerInstance from '../loaders/logger'; +import NotificationService from '../services/notify'; + +Container.set('logger', LoggerInstance); + +export const getEnvs = async ( + call: ServerUnaryCall, + callback: sendUnaryData, +) => { + try { + const envService = Container.get(EnvService); + const data = await envService.envs(call.request.searchValue); + console.log('data', data); + callback(null, { + code: 200, + data: data.map((x) => ({ ...x, remarks: x.remarks || '' })), + }); + } catch (e: any) { + callback(null, { + code: 500, + data: [], + message: e.message, + }); + } +}; + +export const createEnv = async ( + call: ServerUnaryCall, + callback: sendUnaryData, +) => { + try { + const envService = Container.get(EnvService); + const data = await envService.create(call.request.envs); + callback(null, { code: 200, data }); + } catch (e: any) { + callback(e); + } +}; + +export const updateEnv = async ( + call: ServerUnaryCall, + callback: sendUnaryData, +) => { + try { + const envService = Container.get(EnvService); + const data = await envService.update(call.request.env as EnvItem); + callback(null, { code: 200, data }); + } catch (e: any) { + callback(e); + } +}; + +export const deleteEnvs = async ( + call: ServerUnaryCall, + callback: sendUnaryData, +) => { + try { + const envService = Container.get(EnvService); + await envService.remove(call.request.ids); + callback(null, { code: 200 }); + } catch (e: any) { + callback(e); + } +}; + +export const moveEnv = async ( + call: ServerUnaryCall, + callback: sendUnaryData, +) => { + try { + const envService = Container.get(EnvService); + const data = await envService.move(call.request.id, { + fromIndex: call.request.fromIndex, + toIndex: call.request.toIndex, + }); + callback(null, { code: 200, data }); + } catch (e: any) { + callback(e); + } +}; + +export const disableEnvs = async ( + call: ServerUnaryCall, + callback: sendUnaryData, +) => { + try { + const envService = Container.get(EnvService); + await envService.disabled(call.request.ids); + callback(null, { code: 200 }); + } catch (e: any) { + callback(e); + } +}; + +export const enableEnvs = async ( + call: ServerUnaryCall, + callback: sendUnaryData, +) => { + try { + const envService = Container.get(EnvService); + await envService.enabled(call.request.ids); + callback(null, { code: 200 }); + } catch (e: any) { + callback(e); + } +}; + +export const updateEnvNames = async ( + call: ServerUnaryCall, + callback: sendUnaryData, +) => { + try { + const envService = Container.get(EnvService); + await envService.updateNames({ + ids: call.request.ids, + name: call.request.name, + }); + callback(null, { code: 200 }); + } catch (e: any) { + callback(e); + } +}; + +export const getEnvById = async ( + call: ServerUnaryCall, + callback: sendUnaryData, +) => { + try { + const envService = Container.get(EnvService); + const data = await envService.getDb({ id: call.request.id }); + callback(null, { code: 200, data }); + } catch (e: any) { + callback(e); + } +}; + +export const systemNotify = async ( + call: ServerUnaryCall, + callback: sendUnaryData, +) => { + try { + const notifyService = Container.get(NotificationService); + const data = await notifyService.notify( + call.request.title, + call.request.content, + ); + callback(null, { code: 200, data }); + } catch (e: any) { + callback(e); + } +}; diff --git a/back/schedule/index.ts b/back/schedule/index.ts index a3b54c80017..1674b6a418c 100644 --- a/back/schedule/index.ts +++ b/back/schedule/index.ts @@ -6,10 +6,13 @@ import { HealthService } from '../protos/health'; import { check } from './health'; import config from '../config'; import Logger from '../loaders/logger'; +import { ApiService } from '../protos/api'; +import * as Api from './api'; const server = new Server({ 'grpc.enable_http_proxy': 0 }); server.addService(HealthService, { check }); server.addService(CronService, { addCron, delCron }); +server.addService(ApiService, Api); server.bindAsync( `0.0.0.0:${config.cronPort}`, ServerCredentials.createInsecure(), diff --git a/back/services/env.ts b/back/services/env.ts index fe209d6aa3c..bb38e559e9a 100644 --- a/back/services/env.ts +++ b/back/services/env.ts @@ -62,7 +62,7 @@ export default class EnvService { return await this.getDb({ id: payload.id }); } - public async remove(ids: string[]) { + public async remove(ids: number[]) { await EnvModel.destroy({ where: { id: ids } }); await this.set_envs(); } @@ -150,7 +150,7 @@ export default class EnvService { ['position', 'DESC'], ['createdAt', 'ASC'], ]); - return result as any; + return result; } catch (error) { throw error; } @@ -161,7 +161,7 @@ export default class EnvService { where: { ...query }, order: [...sort], }); - return docs; + return docs.map((x) => x.get({ plain: true })); } public async getDb(query: FindOptions['where']): Promise { @@ -172,7 +172,7 @@ export default class EnvService { return doc.get({ plain: true }); } - public async disabled(ids: string[]) { + public async disabled(ids: number[]) { await EnvModel.update( { status: EnvStatus.disabled }, { where: { id: ids } }, @@ -180,12 +180,12 @@ export default class EnvService { await this.set_envs(); } - public async enabled(ids: string[]) { + public async enabled(ids: number[]) { await EnvModel.update({ status: EnvStatus.normal }, { where: { id: ids } }); await this.set_envs(); } - public async updateNames({ ids, name }: { ids: string[]; name: string }) { + public async updateNames({ ids, name }: { ids: number[]; name: string }) { await EnvModel.update({ name }, { where: { id: ids } }); await this.set_envs(); } diff --git a/back/services/open.ts b/back/services/open.ts index 2f63ae9c877..59dcc5bcf86 100644 --- a/back/services/open.ts +++ b/back/services/open.ts @@ -159,16 +159,15 @@ export default class OpenService { value: string; expiration: number; }> { - let systemApp = ( - await AppModel.findOne({ - where: { name: 'system' }, - }) - )?.get({ plain: true }); + const apps = await shareStore.getApps(); + const systemApp = apps?.find((x) => x.name === 'system'); if (!systemApp) { - systemApp = await this.create({ - name: 'system', - scopes: ['crons', 'system'], - } as App); + throw new Error('system app not found'); + } + const now = Math.round(Date.now() / 1000); + const currentToken = systemApp.tokens?.find((x) => x.expiration > now); + if (currentToken) { + return currentToken; } const { data } = await this.authToken({ client_id: systemApp.client_id, diff --git a/back/shared/store.ts b/back/shared/store.ts index 186adf434ab..8816c806a3e 100644 --- a/back/shared/store.ts +++ b/back/shared/store.ts @@ -1,5 +1,5 @@ import { AuthInfo } from '../data/system'; -import { App } from '../data/open'; +import { App, AppToken } from '../data/open'; import Keyv from 'keyv'; import KeyvSqlite from '@keyv/sqlite'; import config from '../config'; @@ -8,11 +8,13 @@ import path from 'path'; export enum EKeyv { 'apps' = 'apps', 'authInfo' = 'authInfo', + 'systemToken' = 'systemToken', } export interface IKeyvStore { apps: App[]; authInfo: AuthInfo; + systemTokens: AppToken[]; } const keyvSqlite = new KeyvSqlite(path.join(config.dbPath, 'keyv.sqlite')); diff --git a/docker/310.Dockerfile b/docker/310.Dockerfile index c15c5ed6fdd..6b0ee5644aa 100644 --- a/docker/310.Dockerfile +++ b/docker/310.Dockerfile @@ -60,7 +60,7 @@ RUN set -x \ && rm -rf /root/.local/share/pnpm/store \ && rm -rf /root/.cache \ && ulimit -c 0 \ - && pip3 install requests + && pip3 install requests grpcio ARG SOURCE_COMMIT RUN git clone --depth=1 -b ${QL_BRANCH} ${QL_URL} ${QL_DIR} \ diff --git a/docker/Dockerfile b/docker/Dockerfile index 733919a5098..11dd1838656 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -60,7 +60,7 @@ RUN set -x \ && rm -rf /root/.local/share/pnpm/store \ && rm -rf /root/.cache \ && ulimit -c 0 \ - && pip3 install requests + && pip3 install requests grpcio ARG SOURCE_COMMIT RUN git clone --depth=1 -b ${QL_BRANCH} ${QL_URL} ${QL_DIR} \ diff --git a/package.json b/package.json index aad1bf6742a..57069dbc28e 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "public": "npm run build:back && node static/build/public.js", "update": "npm run build:back && node static/build/update.js", "gen:proto": "protoc --experimental_allow_proto3_optional --plugin=./node_modules/.bin/protoc-gen-ts_proto ./back/protos/*.proto --ts_proto_out=./ --ts_proto_opt=outputServices=grpc-js,env=node,esModuleInterop=true", + "gen:api": "python3 -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./back/protos/api.proto", "prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'", "postinstall": "max setup 2>/dev/null || true", "test": "umi-test", @@ -61,6 +62,7 @@ }, "dependencies": { "@grpc/grpc-js": "^1.12.3", + "@grpc/proto-loader": "^0.7.13", "@otplib/preset-default": "^12.0.1", "@sentry/node": "^8.42.0", "body-parser": "^1.20.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04322a31bee..98c105630e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ dependencies: '@grpc/grpc-js': specifier: ^1.12.3 version: 1.12.3 + '@grpc/proto-loader': + specifier: ^0.7.13 + version: 0.7.13 '@keyv/sqlite': specifier: ^4.0.1 version: 4.0.1 diff --git a/shell/preload/api_pb2.py b/shell/preload/api_pb2.py new file mode 100644 index 00000000000..4c63993e4ef --- /dev/null +++ b/shell/preload/api_pb2.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: back/protos/api.proto +# Protobuf Python Version: 5.29.0 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 0, + '', + 'back/protos/api.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x62\x61\x63k/protos/api.proto\x12\ncom.ql.api\"\xc1\x01\n\x07\x45nvItem\x12\x0f\n\x02id\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x11\n\x04name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05value\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07remarks\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06status\x18\x05 \x01(\x05H\x04\x88\x01\x01\x12\x15\n\x08position\x18\x06 \x01(\x05H\x05\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\x08\n\x06_valueB\n\n\x08_remarksB\t\n\x07_statusB\x0b\n\t_position\"%\n\x0eGetEnvsRequest\x12\x13\n\x0bsearchValue\x18\x01 \x01(\t\"5\n\x10\x43reateEnvRequest\x12!\n\x04\x65nvs\x18\x01 \x03(\x0b\x32\x13.com.ql.api.EnvItem\"4\n\x10UpdateEnvRequest\x12 \n\x03\x65nv\x18\x01 \x01(\x0b\x32\x13.com.ql.api.EnvItem\" \n\x11\x44\x65leteEnvsRequest\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"@\n\x0eMoveEnvRequest\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x11\n\tfromIndex\x18\x02 \x01(\x05\x12\x0f\n\x07toIndex\x18\x03 \x01(\x05\"!\n\x12\x44isableEnvsRequest\x12\x0b\n\x03ids\x18\x01 \x03(\x05\" \n\x11\x45nableEnvsRequest\x12\x0b\n\x03ids\x18\x01 \x03(\x05\"2\n\x15UpdateEnvNamesRequest\x12\x0b\n\x03ids\x18\x01 \x03(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x1f\n\x11GetEnvByIdRequest\x12\n\n\x02id\x18\x01 \x01(\x05\"a\n\x0c\x45nvsResponse\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x05\x12!\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32\x13.com.ql.api.EnvItem\x12\x14\n\x07message\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_message\"`\n\x0b\x45nvResponse\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x05\x12!\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x13.com.ql.api.EnvItem\x12\x14\n\x07message\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_message\":\n\x08Response\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x05\x12\x14\n\x07message\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_message\"5\n\x13SystemNotifyRequest\x12\r\n\x05title\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\t\"\x16\n\x14SystemNotifyResponse2\xd2\x05\n\x03\x41pi\x12\x41\n\x07GetEnvs\x12\x1a.com.ql.api.GetEnvsRequest\x1a\x18.com.ql.api.EnvsResponse\"\x00\x12\x45\n\tCreateEnv\x12\x1c.com.ql.api.CreateEnvRequest\x1a\x18.com.ql.api.EnvsResponse\"\x00\x12\x44\n\tUpdateEnv\x12\x1c.com.ql.api.UpdateEnvRequest\x1a\x17.com.ql.api.EnvResponse\"\x00\x12\x43\n\nDeleteEnvs\x12\x1d.com.ql.api.DeleteEnvsRequest\x1a\x14.com.ql.api.Response\"\x00\x12@\n\x07MoveEnv\x12\x1a.com.ql.api.MoveEnvRequest\x1a\x17.com.ql.api.EnvResponse\"\x00\x12\x45\n\x0b\x44isableEnvs\x12\x1e.com.ql.api.DisableEnvsRequest\x1a\x14.com.ql.api.Response\"\x00\x12\x43\n\nEnableEnvs\x12\x1d.com.ql.api.EnableEnvsRequest\x1a\x14.com.ql.api.Response\"\x00\x12K\n\x0eUpdateEnvNames\x12!.com.ql.api.UpdateEnvNamesRequest\x1a\x14.com.ql.api.Response\"\x00\x12\x46\n\nGetEnvById\x12\x1d.com.ql.api.GetEnvByIdRequest\x1a\x17.com.ql.api.EnvResponse\"\x00\x12S\n\x0cSystemNotify\x12\x1f.com.ql.api.SystemNotifyRequest\x1a .com.ql.api.SystemNotifyResponse\"\x00\x62\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'back.protos.api_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_ENVITEM']._serialized_start=38 + _globals['_ENVITEM']._serialized_end=231 + _globals['_GETENVSREQUEST']._serialized_start=233 + _globals['_GETENVSREQUEST']._serialized_end=270 + _globals['_CREATEENVREQUEST']._serialized_start=272 + _globals['_CREATEENVREQUEST']._serialized_end=325 + _globals['_UPDATEENVREQUEST']._serialized_start=327 + _globals['_UPDATEENVREQUEST']._serialized_end=379 + _globals['_DELETEENVSREQUEST']._serialized_start=381 + _globals['_DELETEENVSREQUEST']._serialized_end=413 + _globals['_MOVEENVREQUEST']._serialized_start=415 + _globals['_MOVEENVREQUEST']._serialized_end=479 + _globals['_DISABLEENVSREQUEST']._serialized_start=481 + _globals['_DISABLEENVSREQUEST']._serialized_end=514 + _globals['_ENABLEENVSREQUEST']._serialized_start=516 + _globals['_ENABLEENVSREQUEST']._serialized_end=548 + _globals['_UPDATEENVNAMESREQUEST']._serialized_start=550 + _globals['_UPDATEENVNAMESREQUEST']._serialized_end=600 + _globals['_GETENVBYIDREQUEST']._serialized_start=602 + _globals['_GETENVBYIDREQUEST']._serialized_end=633 + _globals['_ENVSRESPONSE']._serialized_start=635 + _globals['_ENVSRESPONSE']._serialized_end=732 + _globals['_ENVRESPONSE']._serialized_start=734 + _globals['_ENVRESPONSE']._serialized_end=830 + _globals['_RESPONSE']._serialized_start=832 + _globals['_RESPONSE']._serialized_end=890 + _globals['_SYSTEMNOTIFYREQUEST']._serialized_start=892 + _globals['_SYSTEMNOTIFYREQUEST']._serialized_end=945 + _globals['_SYSTEMNOTIFYRESPONSE']._serialized_start=947 + _globals['_SYSTEMNOTIFYRESPONSE']._serialized_end=969 + _globals['_API']._serialized_start=972 + _globals['_API']._serialized_end=1694 +# @@protoc_insertion_point(module_scope) diff --git a/shell/preload/api_pb2_grpc.py b/shell/preload/api_pb2_grpc.py new file mode 100644 index 00000000000..557da4cd36c --- /dev/null +++ b/shell/preload/api_pb2_grpc.py @@ -0,0 +1,484 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +import api_pb2 as back_dot_protos_dot_api__pb2 + +GRPC_GENERATED_VERSION = '1.69.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in back/protos/api_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class ApiStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.GetEnvs = channel.unary_unary( + '/com.ql.api.Api/GetEnvs', + request_serializer=back_dot_protos_dot_api__pb2.GetEnvsRequest.SerializeToString, + response_deserializer=back_dot_protos_dot_api__pb2.EnvsResponse.FromString, + _registered_method=True) + self.CreateEnv = channel.unary_unary( + '/com.ql.api.Api/CreateEnv', + request_serializer=back_dot_protos_dot_api__pb2.CreateEnvRequest.SerializeToString, + response_deserializer=back_dot_protos_dot_api__pb2.EnvsResponse.FromString, + _registered_method=True) + self.UpdateEnv = channel.unary_unary( + '/com.ql.api.Api/UpdateEnv', + request_serializer=back_dot_protos_dot_api__pb2.UpdateEnvRequest.SerializeToString, + response_deserializer=back_dot_protos_dot_api__pb2.EnvResponse.FromString, + _registered_method=True) + self.DeleteEnvs = channel.unary_unary( + '/com.ql.api.Api/DeleteEnvs', + request_serializer=back_dot_protos_dot_api__pb2.DeleteEnvsRequest.SerializeToString, + response_deserializer=back_dot_protos_dot_api__pb2.Response.FromString, + _registered_method=True) + self.MoveEnv = channel.unary_unary( + '/com.ql.api.Api/MoveEnv', + request_serializer=back_dot_protos_dot_api__pb2.MoveEnvRequest.SerializeToString, + response_deserializer=back_dot_protos_dot_api__pb2.EnvResponse.FromString, + _registered_method=True) + self.DisableEnvs = channel.unary_unary( + '/com.ql.api.Api/DisableEnvs', + request_serializer=back_dot_protos_dot_api__pb2.DisableEnvsRequest.SerializeToString, + response_deserializer=back_dot_protos_dot_api__pb2.Response.FromString, + _registered_method=True) + self.EnableEnvs = channel.unary_unary( + '/com.ql.api.Api/EnableEnvs', + request_serializer=back_dot_protos_dot_api__pb2.EnableEnvsRequest.SerializeToString, + response_deserializer=back_dot_protos_dot_api__pb2.Response.FromString, + _registered_method=True) + self.UpdateEnvNames = channel.unary_unary( + '/com.ql.api.Api/UpdateEnvNames', + request_serializer=back_dot_protos_dot_api__pb2.UpdateEnvNamesRequest.SerializeToString, + response_deserializer=back_dot_protos_dot_api__pb2.Response.FromString, + _registered_method=True) + self.GetEnvById = channel.unary_unary( + '/com.ql.api.Api/GetEnvById', + request_serializer=back_dot_protos_dot_api__pb2.GetEnvByIdRequest.SerializeToString, + response_deserializer=back_dot_protos_dot_api__pb2.EnvResponse.FromString, + _registered_method=True) + self.SystemNotify = channel.unary_unary( + '/com.ql.api.Api/SystemNotify', + request_serializer=back_dot_protos_dot_api__pb2.SystemNotifyRequest.SerializeToString, + response_deserializer=back_dot_protos_dot_api__pb2.SystemNotifyResponse.FromString, + _registered_method=True) + + +class ApiServicer(object): + """Missing associated documentation comment in .proto file.""" + + def GetEnvs(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateEnv(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateEnv(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteEnvs(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def MoveEnv(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DisableEnvs(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def EnableEnvs(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateEnvNames(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetEnvById(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SystemNotify(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_ApiServicer_to_server(servicer, server): + rpc_method_handlers = { + 'GetEnvs': grpc.unary_unary_rpc_method_handler( + servicer.GetEnvs, + request_deserializer=back_dot_protos_dot_api__pb2.GetEnvsRequest.FromString, + response_serializer=back_dot_protos_dot_api__pb2.EnvsResponse.SerializeToString, + ), + 'CreateEnv': grpc.unary_unary_rpc_method_handler( + servicer.CreateEnv, + request_deserializer=back_dot_protos_dot_api__pb2.CreateEnvRequest.FromString, + response_serializer=back_dot_protos_dot_api__pb2.EnvsResponse.SerializeToString, + ), + 'UpdateEnv': grpc.unary_unary_rpc_method_handler( + servicer.UpdateEnv, + request_deserializer=back_dot_protos_dot_api__pb2.UpdateEnvRequest.FromString, + response_serializer=back_dot_protos_dot_api__pb2.EnvResponse.SerializeToString, + ), + 'DeleteEnvs': grpc.unary_unary_rpc_method_handler( + servicer.DeleteEnvs, + request_deserializer=back_dot_protos_dot_api__pb2.DeleteEnvsRequest.FromString, + response_serializer=back_dot_protos_dot_api__pb2.Response.SerializeToString, + ), + 'MoveEnv': grpc.unary_unary_rpc_method_handler( + servicer.MoveEnv, + request_deserializer=back_dot_protos_dot_api__pb2.MoveEnvRequest.FromString, + response_serializer=back_dot_protos_dot_api__pb2.EnvResponse.SerializeToString, + ), + 'DisableEnvs': grpc.unary_unary_rpc_method_handler( + servicer.DisableEnvs, + request_deserializer=back_dot_protos_dot_api__pb2.DisableEnvsRequest.FromString, + response_serializer=back_dot_protos_dot_api__pb2.Response.SerializeToString, + ), + 'EnableEnvs': grpc.unary_unary_rpc_method_handler( + servicer.EnableEnvs, + request_deserializer=back_dot_protos_dot_api__pb2.EnableEnvsRequest.FromString, + response_serializer=back_dot_protos_dot_api__pb2.Response.SerializeToString, + ), + 'UpdateEnvNames': grpc.unary_unary_rpc_method_handler( + servicer.UpdateEnvNames, + request_deserializer=back_dot_protos_dot_api__pb2.UpdateEnvNamesRequest.FromString, + response_serializer=back_dot_protos_dot_api__pb2.Response.SerializeToString, + ), + 'GetEnvById': grpc.unary_unary_rpc_method_handler( + servicer.GetEnvById, + request_deserializer=back_dot_protos_dot_api__pb2.GetEnvByIdRequest.FromString, + response_serializer=back_dot_protos_dot_api__pb2.EnvResponse.SerializeToString, + ), + 'SystemNotify': grpc.unary_unary_rpc_method_handler( + servicer.SystemNotify, + request_deserializer=back_dot_protos_dot_api__pb2.SystemNotifyRequest.FromString, + response_serializer=back_dot_protos_dot_api__pb2.SystemNotifyResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'com.ql.api.Api', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('com.ql.api.Api', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class Api(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def GetEnvs(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/com.ql.api.Api/GetEnvs', + back_dot_protos_dot_api__pb2.GetEnvsRequest.SerializeToString, + back_dot_protos_dot_api__pb2.EnvsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def CreateEnv(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/com.ql.api.Api/CreateEnv', + back_dot_protos_dot_api__pb2.CreateEnvRequest.SerializeToString, + back_dot_protos_dot_api__pb2.EnvsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def UpdateEnv(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/com.ql.api.Api/UpdateEnv', + back_dot_protos_dot_api__pb2.UpdateEnvRequest.SerializeToString, + back_dot_protos_dot_api__pb2.EnvResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteEnvs(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/com.ql.api.Api/DeleteEnvs', + back_dot_protos_dot_api__pb2.DeleteEnvsRequest.SerializeToString, + back_dot_protos_dot_api__pb2.Response.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def MoveEnv(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/com.ql.api.Api/MoveEnv', + back_dot_protos_dot_api__pb2.MoveEnvRequest.SerializeToString, + back_dot_protos_dot_api__pb2.EnvResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DisableEnvs(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/com.ql.api.Api/DisableEnvs', + back_dot_protos_dot_api__pb2.DisableEnvsRequest.SerializeToString, + back_dot_protos_dot_api__pb2.Response.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def EnableEnvs(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/com.ql.api.Api/EnableEnvs', + back_dot_protos_dot_api__pb2.EnableEnvsRequest.SerializeToString, + back_dot_protos_dot_api__pb2.Response.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def UpdateEnvNames(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/com.ql.api.Api/UpdateEnvNames', + back_dot_protos_dot_api__pb2.UpdateEnvNamesRequest.SerializeToString, + back_dot_protos_dot_api__pb2.Response.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetEnvById(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/com.ql.api.Api/GetEnvById', + back_dot_protos_dot_api__pb2.GetEnvByIdRequest.SerializeToString, + back_dot_protos_dot_api__pb2.EnvResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def SystemNotify(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/com.ql.api.Api/SystemNotify', + back_dot_protos_dot_api__pb2.SystemNotifyRequest.SerializeToString, + back_dot_protos_dot_api__pb2.SystemNotifyResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/shell/preload/client.js b/shell/preload/client.js new file mode 100644 index 00000000000..aae03152488 --- /dev/null +++ b/shell/preload/client.js @@ -0,0 +1,46 @@ +const grpc = require('@grpc/grpc-js'); +const protoLoader = require('@grpc/proto-loader'); +const path = require('path'); + +const PROTO_PATH = path.resolve(__dirname, '../../back/protos/api.proto'); +const options = { + keepCase: true, + longs: String, + enums: String, + defaults: true, + oneofs: true, +}; + +const packageDefinition = protoLoader.loadSync(PROTO_PATH, options); +const apiProto = grpc.loadPackageDefinition(packageDefinition).com.ql.api; + +const client = new apiProto.Api( + `0.0.0.0:${process.env.CRON_PORT}`, + grpc.credentials.createInsecure(), +); + +const promisify = (fn) => { + return (...args) => { + return new Promise((resolve, reject) => { + fn.call(client, ...args, (err, response) => { + if (err) return reject(err); + resolve(response); + }); + }); + }; +}; + +const api = { + getEnvs: promisify(client.GetEnvs), + createEnv: promisify(client.CreateEnv), + updateEnv: promisify(client.UpdateEnv), + deleteEnvs: promisify(client.DeleteEnvs), + moveEnv: promisify(client.MoveEnv), + disableEnvs: promisify(client.DisableEnvs), + enableEnvs: promisify(client.EnableEnvs), + updateEnvNames: promisify(client.UpdateEnvNames), + getEnvById: promisify(client.GetEnvById), + systemNotify: promisify(client.SystemNotify), +}; + +module.exports = api; diff --git a/shell/preload/client.py b/shell/preload/client.py new file mode 100644 index 00000000000..cb8090d0932 --- /dev/null +++ b/shell/preload/client.py @@ -0,0 +1,75 @@ +import grpc +import api_pb2 +import api_pb2_grpc +import os + + +class Client: + def __init__(self): + self.channel = grpc.insecure_channel(f"0.0.0.0:{os.getenv('CRON_PORT')}") + self.stub = api_pb2_grpc.ApiStub(self.channel) + + def getEnvs(self, search_value=""): + """获取环境变量列表""" + request = api_pb2.GetEnvsRequest(searchValue=search_value) + response = self.stub.GetEnvs(request) + return response + + def createEnv(self, name, value, status=1, position=1): + """创建环境变量""" + env_item = api_pb2.EnvItem( + name=name, value=value, status=status, position=position + ) + request = api_pb2.CreateEnvRequest(envs=[env_item]) + response = self.stub.CreateEnv(request) + return response + + def updateEnv(self, env_id, name, value): + """更新环境变量""" + request = api_pb2.UpdateEnvRequest( + env=api_pb2.EnvItem(id=env_id, name=name, value=value) + ) + response = self.stub.UpdateEnv(request) + return response + + def deleteEnvs(self, ids): + """删除环境变量""" + request = api_pb2.DeleteEnvsRequest(ids=ids) + response = self.stub.DeleteEnvs(request) + return response + + def moveEnv(self, env_id, position): + """移动环境变量""" + request = api_pb2.MoveEnvRequest(envId=env_id, position=position) + response = self.stub.MoveEnv(request) + return response + + def disableEnvs(self, ids): + """禁用环境变量""" + request = api_pb2.DisableEnvsRequest(ids=ids) + response = self.stub.DisableEnvs(request) + return response + + def enableEnvs(self, ids): + """启用环境变量""" + request = api_pb2.EnableEnvsRequest(ids=ids) + response = self.stub.EnableEnvs(request) + return response + + def updateEnvNames(self, env_id, name): + """更新环境变量名称""" + request = api_pb2.UpdateEnvNamesRequest(envId=env_id, name=name) + response = self.stub.UpdateEnvNames(request) + return response + + def getEnvById(self, env_id): + """获取环境变量详情""" + request = api_pb2.GetEnvByIdRequest(envId=env_id) + response = self.stub.GetEnvById(request) + return response + + def systemNotify(self, title, content): + """系统通知""" + request = api_pb2.SystemNotifyRequest(title=title, content=content) + response = self.stub.SystemNotify(request) + return response diff --git a/shell/preload/sitecustomize.js b/shell/preload/sitecustomize.js index 5a4cdfbf758..424674f7044 100644 --- a/shell/preload/sitecustomize.js +++ b/shell/preload/sitecustomize.js @@ -1,4 +1,5 @@ const { execSync } = require('child_process'); +const client = require('./client.js'); require(`./env.js`); function expandRange(rangeStr, max) { @@ -100,6 +101,7 @@ try { const { sendNotify } = require('./notify.js'); global.QLAPI = { notify: sendNotify, + ...client, }; } catch (error) { console.log(`run builtin code error: `, error, '\n'); diff --git a/shell/preload/sitecustomize.py b/shell/preload/sitecustomize.py index b3b5ad96f62..7e796e61c77 100644 --- a/shell/preload/sitecustomize.py +++ b/shell/preload/sitecustomize.py @@ -6,6 +6,7 @@ import sys import env import signal +from client import Client def try_parse_int(value): @@ -108,7 +109,7 @@ def handle_sigterm(signum, frame): from notify import send - class BaseApi: + class BaseApi(Client): def notify(self, *args, **kwargs): return send(*args, **kwargs)