931 lines
21 KiB
TypeScript
931 lines
21 KiB
TypeScript
import queryString from 'query-string';
|
|
import { parseLinkHeader } from '@web3-storage/parse-link-header';
|
|
|
|
const API_URL = process.env.REACT_APP_API_URL || window.location.href;
|
|
|
|
export async function get(url: URL) {
|
|
try {
|
|
const response = await fetch(url, {
|
|
credentials: 'include',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
});
|
|
|
|
if (response.status === 200) {
|
|
return response;
|
|
}
|
|
const errorMessage = (await response.json())?.message;
|
|
throw new Error(errorMessage && typeof errorMessage === 'string' ? errorMessage : response.statusText);
|
|
} catch (err) {
|
|
if (err instanceof Error) {
|
|
throw new Error(err.message);
|
|
}
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
export async function post(url: URL, request = {}) {
|
|
try {
|
|
const response = await fetch(url, {
|
|
method: 'POST',
|
|
mode: 'cors',
|
|
credentials: 'include',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify(request || {}),
|
|
});
|
|
|
|
if (response.status === 200) {
|
|
return response;
|
|
}
|
|
const errorMessage = (await response.json())?.message;
|
|
throw new Error(errorMessage && typeof errorMessage === 'string' ? errorMessage : response.statusText);
|
|
} catch (err) {
|
|
if (err instanceof Error) {
|
|
throw new Error(err.message);
|
|
}
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
export async function patch(url: URL, request = {}) {
|
|
try {
|
|
const response = await fetch(url, {
|
|
method: 'PATCH',
|
|
mode: 'cors',
|
|
credentials: 'include',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify(request || {}),
|
|
});
|
|
|
|
if (response.status === 200) {
|
|
return response;
|
|
}
|
|
const errorMessage = (await response.json())?.message;
|
|
throw new Error(errorMessage && typeof errorMessage === 'string' ? errorMessage : response.statusText);
|
|
} catch (err) {
|
|
if (err instanceof Error) {
|
|
throw new Error(err.message);
|
|
}
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
export async function destroy(url: URL) {
|
|
try {
|
|
const response = await fetch(url, {
|
|
method: 'DELETE',
|
|
mode: 'cors',
|
|
credentials: 'include',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
});
|
|
|
|
if (response.status === 200) {
|
|
return response;
|
|
}
|
|
const errorMessage = (await response.json())?.message;
|
|
throw new Error(errorMessage && typeof errorMessage === 'string' ? errorMessage : response.statusText);
|
|
} catch (err) {
|
|
if (err instanceof Error) {
|
|
throw new Error(err.message);
|
|
}
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
export async function put(url: URL) {
|
|
try {
|
|
const response = await fetch(url, {
|
|
method: 'PUT',
|
|
mode: 'cors',
|
|
credentials: 'include',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
});
|
|
|
|
if (response.status === 200) {
|
|
return response;
|
|
}
|
|
const errorMessage = (await response.json())?.message;
|
|
throw new Error(errorMessage && typeof errorMessage === 'string' ? errorMessage : response.statusText);
|
|
} catch (err) {
|
|
if (err instanceof Error) {
|
|
throw new Error(err.message);
|
|
}
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
interface signInRequset {
|
|
name: string;
|
|
password: string;
|
|
}
|
|
|
|
interface signInResponse {
|
|
expire: string;
|
|
token: string;
|
|
}
|
|
|
|
export async function signIn(request: signInRequset): Promise<signInResponse> {
|
|
const url = new URL('/api/v1/users/signin', API_URL);
|
|
const response = await post(url, request);
|
|
return await response.json();
|
|
}
|
|
|
|
interface signUpRequset {
|
|
name: string;
|
|
password: string;
|
|
email: string;
|
|
}
|
|
|
|
interface signUpResponse {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
email: string;
|
|
name: string;
|
|
avatar: string;
|
|
phone: string;
|
|
state: string;
|
|
location: string;
|
|
bio: string;
|
|
configs: string;
|
|
}
|
|
|
|
export async function signUp(request: signUpRequset): Promise<signUpResponse> {
|
|
const url = new URL('/api/v1/users/signup', API_URL);
|
|
const response = await post(url, request);
|
|
return await response.json();
|
|
}
|
|
|
|
export async function signOut() {
|
|
const url = new URL('/api/v1/users/signout', API_URL);
|
|
return await post(url);
|
|
}
|
|
|
|
interface getClustersParams {
|
|
page?: number;
|
|
per_page?: number;
|
|
name?: string;
|
|
}
|
|
|
|
export interface getClustersResponse {
|
|
id: number;
|
|
name: string;
|
|
bio: string;
|
|
scopes: {
|
|
idc: string;
|
|
location: string;
|
|
cidrs: Array<string>;
|
|
hostnames: Array<string>;
|
|
};
|
|
created_at: string;
|
|
is_default: boolean;
|
|
}
|
|
|
|
export async function getClusters(params?: getClustersParams): Promise<getClustersResponse[]> {
|
|
const url = params
|
|
? new URL(`/api/v1/clusters?${queryString.stringify(params)}`, API_URL)
|
|
: new URL('/api/v1/clusters', API_URL);
|
|
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
export interface getClusterResponse {
|
|
id: number;
|
|
name: string;
|
|
bio: string;
|
|
scopes: {
|
|
idc: string;
|
|
location: string;
|
|
cidrs: Array<string>;
|
|
hostnames: Array<string>;
|
|
};
|
|
scheduler_cluster_id: number;
|
|
seed_peer_cluster_id: number;
|
|
scheduler_cluster_config: {
|
|
candidate_parent_limit: number;
|
|
filter_parent_limit: number;
|
|
};
|
|
seed_peer_cluster_config: {
|
|
load_limit: number;
|
|
};
|
|
peer_cluster_config: {
|
|
load_limit: number;
|
|
};
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_default: boolean;
|
|
}
|
|
|
|
export async function getCluster(id: string): Promise<getClusterResponse> {
|
|
const url = new URL(`/api/v1/clusters/${id}`, API_URL);
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
interface createClusterRequest {
|
|
name: string;
|
|
peer_cluster_config: {
|
|
load_limit: number;
|
|
};
|
|
scheduler_cluster_config: {
|
|
candidate_parent_limit: number;
|
|
filter_parent_limit: number;
|
|
};
|
|
seed_peer_cluster_config: {
|
|
load_limit: number;
|
|
};
|
|
bio: string;
|
|
is_default: boolean;
|
|
scopes: {
|
|
cidrs: Array<string>;
|
|
idc: string;
|
|
location: string;
|
|
hostnames: Array<string>;
|
|
};
|
|
}
|
|
|
|
interface createClusterResponse {
|
|
id: string;
|
|
name: string;
|
|
peer_cluster_config: {
|
|
load_limit: number;
|
|
};
|
|
scheduler_cluster_config: {
|
|
candidate_parent_limit: number;
|
|
filter_parent_limit: number;
|
|
};
|
|
scheduler_cluster_id?: number;
|
|
seed_peer_cluster_id?: number;
|
|
seed_peer_cluster_config: {
|
|
load_limit: number;
|
|
};
|
|
bio: string;
|
|
is_default: boolean;
|
|
scopes: {
|
|
cidrs: Array<string>;
|
|
idc: string;
|
|
location: string;
|
|
hostnames: Array<string>;
|
|
};
|
|
}
|
|
|
|
export async function createCluster(request: createClusterRequest): Promise<createClusterResponse> {
|
|
const url = new URL('/api/v1/clusters', API_URL);
|
|
const response = await post(url, request);
|
|
return response.json();
|
|
}
|
|
|
|
interface updateClusterRequset {
|
|
is_default: boolean;
|
|
bio: string;
|
|
peer_cluster_config: {
|
|
load_limit: number;
|
|
};
|
|
scheduler_cluster_config: {
|
|
candidate_parent_limit: number;
|
|
filter_parent_limit: number;
|
|
};
|
|
scopes: {
|
|
cidrs: Array<string>;
|
|
idc: string;
|
|
location: string;
|
|
hostnames: Array<string>;
|
|
};
|
|
seed_peer_cluster_config: {
|
|
load_limit: number;
|
|
};
|
|
}
|
|
|
|
interface updateClusterResponse {
|
|
id: string;
|
|
name: string;
|
|
peer_cluster_config: {
|
|
load_limit: number;
|
|
};
|
|
scheduler_cluster_config: {
|
|
candidate_parent_limit: number;
|
|
filter_parent_limit: number;
|
|
};
|
|
scheduler_cluster_id?: number;
|
|
seed_peer_cluster_id?: number;
|
|
seed_peer_cluster_config: {
|
|
load_limit: number;
|
|
};
|
|
bio: string;
|
|
is_default: boolean;
|
|
scopes: {
|
|
cidrs: Array<string>;
|
|
idc: string;
|
|
location: string;
|
|
hostnames: Array<string>;
|
|
};
|
|
}
|
|
|
|
export async function updateCluster(id: string, request: updateClusterRequset): Promise<updateClusterResponse> {
|
|
const url = new URL(`/api/v1/clusters/${id}`, API_URL);
|
|
const response = await patch(url, request);
|
|
return await response.json();
|
|
}
|
|
|
|
export async function deleteCluster(id: string) {
|
|
const url = new URL(`/api/v1/clusters/${id}`, API_URL);
|
|
return await destroy(url);
|
|
}
|
|
|
|
interface getSchedulerParmas {
|
|
scheduler_cluster_id?: string;
|
|
page?: number;
|
|
per_page?: number;
|
|
host_name?: string;
|
|
}
|
|
|
|
export interface getSchedulersResponse {
|
|
id: number;
|
|
host_name: string;
|
|
ip: string;
|
|
scheduler_cluster_id: number;
|
|
port: string;
|
|
state: string;
|
|
idc: string;
|
|
features: Array<string>;
|
|
location: string;
|
|
created_at: string;
|
|
updated_at: string;
|
|
}
|
|
|
|
export async function getSchedulers(params?: getSchedulerParmas): Promise<getSchedulersResponse[]> {
|
|
const url = params
|
|
? new URL(`/api/v1/schedulers?${queryString.stringify(params)}`, API_URL)
|
|
: new URL('/api/v1/schedulers', API_URL);
|
|
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
export interface getSchedulerResponse {
|
|
id: number;
|
|
host_name: string;
|
|
ip: string;
|
|
scheduler_cluster_id: number;
|
|
port: string;
|
|
state: string;
|
|
idc: string;
|
|
features: Array<string>;
|
|
location: string;
|
|
created_at: string;
|
|
updated_at: string;
|
|
}
|
|
|
|
export async function getScheduler(id: string): Promise<getSchedulerResponse> {
|
|
const url = new URL(`/api/v1/schedulers/${id}`, API_URL);
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
export async function getSchedulerFeatrues(): Promise<Array<string>> {
|
|
const url = new URL(`/api/v1/scheduler-features`, API_URL);
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
interface updateSchedulerFeatruesRequset {
|
|
features: Array<string>;
|
|
}
|
|
|
|
export async function updateSchedulerFeatrues(
|
|
id: string,
|
|
request: updateSchedulerFeatruesRequset,
|
|
): Promise<getSchedulerResponse> {
|
|
const url = new URL(`/api/v1/schedulers/${id}`, API_URL);
|
|
const response = await patch(url, request);
|
|
return await response.json();
|
|
}
|
|
|
|
export async function deleteScheduler(id: string) {
|
|
const url = new URL(`/api/v1/schedulers/${id}`, API_URL);
|
|
return await destroy(url);
|
|
}
|
|
|
|
interface getSeedPeersParmas {
|
|
seed_peer_cluster_id?: string;
|
|
page?: number;
|
|
per_page?: number;
|
|
host_name?: string;
|
|
}
|
|
|
|
export interface getSeedPeersResponse {
|
|
id: number;
|
|
host_name: string;
|
|
ip: string;
|
|
port: string;
|
|
download_port: string;
|
|
object_storage_port: string;
|
|
type: string;
|
|
state: string;
|
|
idc: string;
|
|
location: string;
|
|
created_at: string;
|
|
updated_at: string;
|
|
seed_peer_cluster_id: number;
|
|
}
|
|
|
|
export async function getSeedPeers(params?: getSeedPeersParmas): Promise<getSeedPeersResponse[]> {
|
|
const url = params
|
|
? new URL(`/api/v1/seed-peers?${queryString.stringify(params)}`, API_URL)
|
|
: new URL('/api/v1/seed-peers', API_URL);
|
|
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
export interface getSeedPeerResponse {
|
|
id: number;
|
|
host_name: string;
|
|
ip: string;
|
|
port: string;
|
|
download_port: string;
|
|
object_storage_port: string;
|
|
type: string;
|
|
state: string;
|
|
idc: string;
|
|
location: string;
|
|
created_at: string;
|
|
updated_at: string;
|
|
seed_peer_cluster_id: number;
|
|
}
|
|
|
|
export async function getSeedPeer(id: string): Promise<getSeedPeerResponse> {
|
|
const url = new URL(`/api/v1/seed-peers/${id}`, API_URL);
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
export async function deleteSeedPeer(id: string) {
|
|
const url = new URL(`/api/v1/seed-peers/${id}`, API_URL);
|
|
return await destroy(url);
|
|
}
|
|
|
|
interface getUserParams {
|
|
page?: number;
|
|
per_page?: number;
|
|
}
|
|
|
|
export interface getUsersResponse {
|
|
avatar: string;
|
|
id: number;
|
|
email: string;
|
|
name: string;
|
|
state: string;
|
|
location: string;
|
|
}
|
|
|
|
export async function getUsers(params: getUserParams): Promise<getUsersResponse[]> {
|
|
const url = params
|
|
? new URL(`/api/v1/users?${queryString.stringify(params)}`, API_URL)
|
|
: new URL('/api/v1/users', API_URL);
|
|
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
export interface getUserResponse {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: 0;
|
|
email: string;
|
|
name: string;
|
|
avatar: string;
|
|
phone: string;
|
|
state: string;
|
|
location: string;
|
|
bio: string;
|
|
}
|
|
|
|
export async function getUser(id: string): Promise<getUserResponse> {
|
|
const url = new URL(`/api/v1/users/${id}`, API_URL);
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
export async function getUserRoles(id: string): Promise<string[]> {
|
|
const url = new URL(`/api/v1/users/${id}/roles`, API_URL);
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
interface updateUserRequset {
|
|
bio: string;
|
|
email: string;
|
|
location: string;
|
|
phone: string;
|
|
}
|
|
|
|
interface updateUserResponse {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
email: string;
|
|
name: string;
|
|
avatar: string;
|
|
phone: string;
|
|
state: string;
|
|
location: string;
|
|
bio: string;
|
|
configs: string;
|
|
}
|
|
|
|
export async function updateUser(id: string, request: updateUserRequset): Promise<updateUserResponse> {
|
|
const url = new URL(`/api/v1/users/${id}`, API_URL);
|
|
const response = await patch(url, request);
|
|
return await response.json();
|
|
}
|
|
|
|
interface updatePasswordRequset {
|
|
old_password: string;
|
|
new_password: string;
|
|
}
|
|
|
|
export async function updatePassword(id: string, request: updatePasswordRequset) {
|
|
const url = new URL(`/api/v1/users/${id}/reset_password`, API_URL);
|
|
return await post(url, request);
|
|
}
|
|
|
|
export async function deleteUserRole(id: string, role: string) {
|
|
const url = new URL(`/api/v1/users/${id}/roles/${role}`, API_URL);
|
|
return await destroy(url);
|
|
}
|
|
|
|
export async function putUserRole(id: string, role: string) {
|
|
const url = new URL(`/api/v1/users/${id}/roles/${role}`, API_URL);
|
|
return await put(url);
|
|
}
|
|
|
|
interface getTokensParams {
|
|
page?: number;
|
|
per_page?: number;
|
|
}
|
|
|
|
export interface getTokensResponse {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
name: string;
|
|
bio: string;
|
|
token: string;
|
|
scopes: Array<string>;
|
|
state: string;
|
|
expired_at: string;
|
|
user_id: number;
|
|
user: {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
email: string;
|
|
name: string;
|
|
avatar: string;
|
|
phone: string;
|
|
state: string;
|
|
location: string;
|
|
bio: string;
|
|
configs: null;
|
|
};
|
|
}
|
|
|
|
export async function getTokens(params?: getTokensParams): Promise<getTokensResponse[]> {
|
|
const url = params
|
|
? new URL(`/api/v1/personal-access-tokens?${queryString.stringify(params)}`, API_URL)
|
|
: new URL('/api/v1/personal-access-tokens', API_URL);
|
|
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
export async function getToken(id: string): Promise<getTokensResponse> {
|
|
const url = new URL(`/api/v1/personal-access-tokens/${id}`, API_URL);
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
interface createTokensRequest {
|
|
name: string;
|
|
bio: string;
|
|
scopes: Array<string>;
|
|
expired_at: string;
|
|
}
|
|
|
|
interface createTokensResponse {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
name: string;
|
|
bio: string;
|
|
token: string;
|
|
scopes: Array<string>;
|
|
state: string;
|
|
expired_at: string;
|
|
user_id: number;
|
|
}
|
|
|
|
export async function createTokens(request: createTokensRequest): Promise<createTokensResponse> {
|
|
const url = new URL(`/api/v1/personal-access-tokens`, API_URL);
|
|
const response = await post(url, request);
|
|
return await response.json();
|
|
}
|
|
|
|
export async function deleteTokens(id: string) {
|
|
const url = new URL(`/api/v1/personal-access-tokens/${id}`, API_URL);
|
|
return await destroy(url);
|
|
}
|
|
|
|
interface updateTokensRequset {
|
|
bio: string;
|
|
expired_at: string;
|
|
scopes: Array<string>;
|
|
}
|
|
|
|
interface updateTokensResponse {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
name: string;
|
|
bio: string;
|
|
token: string;
|
|
scopes: Array<string>;
|
|
state: string;
|
|
expired_at: string;
|
|
user_id: number;
|
|
}
|
|
|
|
export async function updateTokens(id: string, request: updateTokensRequset): Promise<updateTokensResponse> {
|
|
const url = new URL(`/api/v1/personal-access-tokens/${id}`, API_URL);
|
|
const response = await patch(url, request);
|
|
return await response.json();
|
|
}
|
|
|
|
interface getJobsParams {
|
|
page?: number;
|
|
per_page?: number;
|
|
user_id?: string;
|
|
state?: string;
|
|
}
|
|
|
|
interface JobStates {
|
|
created_at: string;
|
|
error: string;
|
|
results: Array<string> | null;
|
|
state: string;
|
|
task_name: string;
|
|
task_uuid: string;
|
|
ttl: number;
|
|
}
|
|
|
|
interface scheduler_clusters {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
name: string;
|
|
bio: string;
|
|
config: {
|
|
candidate_parent_limit: number;
|
|
filter_parent_limit: number;
|
|
};
|
|
client_config: {
|
|
concurrent_piece_count: number;
|
|
load_limit: number;
|
|
};
|
|
scopes: {};
|
|
is_default: true;
|
|
seed_peer_clusters: null;
|
|
schedulers: null;
|
|
peers: null;
|
|
jobs: null;
|
|
}
|
|
|
|
export interface JobsResponse {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
task_id: string;
|
|
bio: string;
|
|
type: string;
|
|
state: string;
|
|
args: {
|
|
concurrent_count: number;
|
|
headers: { [key: string]: string } | null;
|
|
password: string;
|
|
platform: string;
|
|
scope: string;
|
|
tag: string;
|
|
timeout: number;
|
|
type: string;
|
|
url: string;
|
|
username: string;
|
|
};
|
|
result: {
|
|
created_at: string;
|
|
group_uuid: string;
|
|
job_states: Array<JobStates>;
|
|
state: string;
|
|
updated_at: string;
|
|
};
|
|
user_id: number;
|
|
user: {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
email: string;
|
|
name: string;
|
|
avatar: string;
|
|
phone: string;
|
|
state: string;
|
|
location: string;
|
|
bio: string;
|
|
configs: null | any;
|
|
};
|
|
seed_peer_clusters: any[];
|
|
scheduler_clusters: scheduler_clusters;
|
|
}
|
|
|
|
interface getJobsResponse {
|
|
data: JobsResponse[];
|
|
total_page?: number;
|
|
}
|
|
|
|
export async function getJobs(params: getJobsParams): Promise<getJobsResponse> {
|
|
const url = new URL(`/api/v1/jobs?${queryString.stringify(params)}&type=preheat`, API_URL);
|
|
|
|
const response = await get(url);
|
|
const data = await response.json();
|
|
const linkHeader = response.headers.get('link');
|
|
const links = parseLinkHeader(linkHeader || null);
|
|
const totalPage = Number(links?.last?.page);
|
|
const responses = { data: data, total_page: totalPage };
|
|
return responses;
|
|
}
|
|
|
|
export interface getJobResponse {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
task_id: string;
|
|
bio: string;
|
|
type: string;
|
|
state: string;
|
|
args: {
|
|
concurrent_count: number;
|
|
filtered_query_params: string;
|
|
headers: { [key: string]: string } | null;
|
|
password: string;
|
|
platform: string;
|
|
scope: string;
|
|
tag: string;
|
|
timeout: number;
|
|
type: string;
|
|
url: string;
|
|
username: string;
|
|
};
|
|
result: {
|
|
created_at: string;
|
|
group_uuid: string;
|
|
job_states: Array<JobStates>;
|
|
state: string;
|
|
updated_at: string;
|
|
};
|
|
user_id: number;
|
|
user: {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
email: string;
|
|
name: string;
|
|
avatar: string;
|
|
phone: string;
|
|
state: string;
|
|
location: string;
|
|
bio: string;
|
|
configs: null;
|
|
};
|
|
seed_peer_clusters: [];
|
|
scheduler_clusters: Array<scheduler_clusters>;
|
|
}
|
|
|
|
export async function getJob(id: string): Promise<getJobResponse> {
|
|
const url = new URL(`/api/v1/jobs/${id}`, API_URL);
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|
|
|
|
interface createJobRequest {
|
|
bio: string;
|
|
type: string;
|
|
args: {
|
|
type: string;
|
|
url: string;
|
|
tag: string;
|
|
filtered_query_params: string;
|
|
headers?: { [key: string]: string } | null;
|
|
};
|
|
scheduler_cluster_ids: Array<number>;
|
|
}
|
|
|
|
interface cerateJobResponse {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
task_id: string;
|
|
bio: string;
|
|
type: string;
|
|
state: string;
|
|
args: {
|
|
filtered_query_params: string;
|
|
headers: { [key: string]: string };
|
|
tag: string;
|
|
type: string;
|
|
url: string;
|
|
};
|
|
result: string;
|
|
}
|
|
|
|
export async function createJob(request: createJobRequest): Promise<cerateJobResponse> {
|
|
const url = new URL(`/api/v1/jobs`, API_URL);
|
|
const response = await post(url, request);
|
|
return await response.json();
|
|
}
|
|
|
|
interface getpeerParams {
|
|
page?: number;
|
|
per_page?: number;
|
|
}
|
|
|
|
export interface getPeersResponse {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: number;
|
|
host_name: string;
|
|
type: string;
|
|
idc: string;
|
|
location: string;
|
|
ip: string;
|
|
port: number;
|
|
download_port: number;
|
|
object_storage_port: number;
|
|
state: string;
|
|
os: string;
|
|
platform: string;
|
|
platform_family: string;
|
|
platform_version: string;
|
|
kernel_version: string;
|
|
git_version: string;
|
|
git_commit: string;
|
|
build_platform: string;
|
|
scheduler_cluster_id: number;
|
|
scheduler_cluster: {
|
|
id: number;
|
|
created_at: string;
|
|
updated_at: string;
|
|
is_del: 0;
|
|
name: string;
|
|
bio: string;
|
|
config: {
|
|
candidate_parent_limit: number;
|
|
filter_parent_limit: number;
|
|
};
|
|
client_config: {
|
|
load_limit: number;
|
|
};
|
|
scopes: {
|
|
cidrs: Array<string>;
|
|
idc: '';
|
|
location: '';
|
|
};
|
|
is_default: boolean;
|
|
seed_peer_clusters: number;
|
|
schedulers: string;
|
|
peers: string;
|
|
jobs: string;
|
|
};
|
|
}
|
|
|
|
export async function getPeers(params?: getpeerParams): Promise<getPeersResponse[]> {
|
|
const url = params
|
|
? new URL(`/api/v1/peers?${queryString.stringify(params)}`, API_URL)
|
|
: new URL('/api/v1/peers', API_URL);
|
|
|
|
const response = await get(url);
|
|
return await response.json();
|
|
}
|