add fetch timeout

This commit is contained in:
liugq 2021-11-23 17:17:24 +08:00
parent 7a0fb883f4
commit 9cfabef80b
3 changed files with 99 additions and 74 deletions

10
ui.go
View File

@ -32,12 +32,14 @@ func (h UI) InitUI() {
uiapi.Init(h.Config)
var apiEndpoint = h.Config.UI.APIEndpoint
if strings.TrimSpace(apiEndpoint) == "" {
apiConfig := &global.Env().SystemConfig.APIConfig
apiEndpoint = fmt.Sprintf("%s://%s", apiConfig.GetSchema(), apiConfig.NetworkConfig.GetPublishAddr())
}
apiConfig := &global.Env().SystemConfig.APIConfig
ui.HandleUIFunc("/config", func(w http.ResponseWriter, req *http.Request){
if(strings.TrimSpace(apiEndpoint) == ""){
hostParts := strings.Split(req.Host, ":")
apiEndpoint = fmt.Sprintf("%s//%s:%s", apiConfig.GetSchema(), hostParts[0], apiConfig.NetworkConfig.GetBindingPort())
}
buf, _ := json.Marshal(util.MapStr{
"api_endpoint": apiEndpoint,
})

View File

@ -1,70 +1,74 @@
import request from '@/utils/request';
import {buildQueryArgs, ESPrefix} from './common';
import request from "@/utils/request";
import { buildQueryArgs, ESPrefix, fetchWithTimeout } from "./common";
export async function getClusterVersion(params) {
return request(`${ESPrefix}/${params.cluster}/version`, {
method: 'GET'
});
return request(`${ESPrefix}/${params.cluster}/version`, {
method: "GET",
});
}
export async function getClusterMetrics(params) {
let id = params.cluster_id;
delete(params['cluster_id']);
return request(`${ESPrefix}/${id}/metrics?min=${params.timeRange.min}&max=${params.timeRange.max}`, {
method: 'GET'
});
let id = params.cluster_id;
delete params["cluster_id"];
return request(
`${ESPrefix}/${id}/metrics?min=${params.timeRange.min}&max=${params.timeRange.max}`,
{
method: "GET",
}
);
}
export async function createClusterConfig(params) {
return request(`${ESPrefix}/`, {
method: 'POST',
body: params,
});
return request(`${ESPrefix}/`, {
method: "POST",
body: params,
});
}
export async function updateClusterConfig(params) {
let id = params.id;
delete(params['id']);
return request(`${ESPrefix}/${id}`, {
method: 'PUT',
body: params,
});
let id = params.id;
delete params["id"];
return request(`${ESPrefix}/${id}`, {
method: "PUT",
body: params,
});
}
export async function deleteClusterConfig(params) {
return request(`${ESPrefix}/${params.id}`, {
method: 'DELETE',
body: params,
});
return request(`${ESPrefix}/${params.id}`, {
method: "DELETE",
body: params,
});
}
export async function searchClusterConfig(params) {
let url = `${ESPrefix}/_search`;
let args = buildQueryArgs({
name: params.name,
enabled: params.enabled,
from: params.from,
size: params.size,
});
if(args.length > 0){
url += args;
}
return request(url, {
method: 'GET',
});
let url = `${ESPrefix}/_search`;
let args = buildQueryArgs({
name: params.name,
enabled: params.enabled,
from: params.from,
size: params.size,
});
if (args.length > 0) {
url += args;
}
return request(url, {
method: "GET",
});
}
export async function getClusterStatus(params) {
let url = `${ESPrefix}/status`;
return request(url, {
method: 'GET',
});
let url = `${ESPrefix}/status`;
return request(url, {
method: "GET",
});
}
export async function tryConnect(params) {
let url = `${ESPrefix}/try_connect`;
return request(url, {
method: 'POST',
body: params,
});
}
let url = `${ESPrefix}/try_connect`;
return request(url, {
method: "POST",
body: params,
});
}

View File

@ -1,46 +1,65 @@
import $ from 'jquery';
import $ from "jquery";
function getConfig(){
function getConfig() {
const options = {
url: "/config",
cache: false,
type: 'GET',
dataType: 'json', // disable automatic guessing
type: "GET",
dataType: "json", // disable automatic guessing
async: false,
};
let result = {}
try{
let result = {};
try {
const text = $.ajax(options).responseText;
result = JSON.parse(text);
}catch(e){
console.warn('failed get config data')
} catch (e) {
console.warn("failed get config data");
}
return result;
}
const {api_endpoint} = getConfig();
const { api_endpoint } = getConfig();
let apiEndpoint = api_endpoint;
if(!apiEndpoint){
if (!apiEndpoint) {
apiEndpoint = API_ENDPOINT;
if(!API_ENDPOINT){
apiEndpoint = `${location.protocol}//${location.hostname}:2900`
if (!API_ENDPOINT) {
apiEndpoint = `${location.protocol}//${location.hostname}:2900`;
}
}
export const pathPrefix = (apiEndpoint || '') + '/_search-center';
export function buildQueryArgs(params){
let argsStr = '';
for(let key in params){
if(typeof params[key] !== 'undefined') {
argsStr += `${key}=${params[key]}&`
export const pathPrefix = (apiEndpoint || "") + "/_search-center";
export function buildQueryArgs(params) {
let argsStr = "";
for (let key in params) {
if (typeof params[key] !== "undefined") {
argsStr += `${key}=${params[key]}&`;
}
}
if(argsStr.length > 0){
argsStr = '?' + argsStr
argsStr = argsStr.slice(0, argsStr.length -1)
if (argsStr.length > 0) {
argsStr = "?" + argsStr;
argsStr = argsStr.slice(0, argsStr.length - 1);
}
return argsStr;
}
export const ESPrefix = (apiEndpoint || "") + "/elasticsearch";
export const ESPrefix = (apiEndpoint || '') + '/elasticsearch';
export async function fetchWithTimeout(resource, options = {}) {
const { timeout = 5000 } = options;
const controller = new AbortController();
const id = setTimeout(() => {
controller.abort();
}, timeout);
try {
const response = await fetch(resource, {
...options,
signal: controller.signal,
});
clearTimeout(id);
return response.json();
} catch (err) {
return {
error: "timeout",
};
}
}