Monitoring-Speed-App/src/services/api.jsx
2025-02-14 16:45:12 +07:00

118 lines
4.2 KiB
JavaScript

import axios from 'axios';
const API_SPEED_URL = import.meta.env.VITE_API_SPEED_URL;
const API_PING_URL = import.meta.env.VITE_API_PING_URL;
const API_METRICS_URL = import.meta.env.VITE_API_METRICS_URL;
// console.log(import.meta.env.VITE_API_URL)
export const fetchSpeedTestData = async () => {
try {
const response = await axios.get(API_SPEED_URL, {
headers: {
'Author': 'vedeom',
},
});
console.log('API Response:', response.data); // Log seluruh response
console.log('Parsed Data:', response.data.data || []); // Log data yang diproses
return response.data.data || [];
} catch (error) {
console.error('API Fetch Error:', error.message); // Log error jika terjadi kesalahan
throw new Error(error.message);
}
};
export const fetchActiveDevices = async () => {
try {
const response = await axios.get(API_PING_URL);
// console.log('Devices API Response:', response.data);
// Pastikan response.data adalah array
const dataArray = Array.isArray(response.data) ? response.data : [];
// Konversi data API ke format yang sesuai
const formattedDevices = dataArray.flatMap(item =>
item.result.map(device => ({
id: item.id, // Menggunakan id dari API sebagai key
ip: device.target, // IP Address
name: device.devices, // Nama perangkat
is_online: device.alive === 1 ? "Online" : "Offline" // Status perangkat
}))
);
// console.log('Parsed Devices:', formattedDevices);
return formattedDevices;
} catch (error) {
console.error('Devices API Fetch Error:', error.message);
return [];
}
};
export const fetchMetricsData = async () => {
try {
console.log("Fetching Metrics from:", API_METRICS_URL);
const response = await axios.get(API_METRICS_URL);
console.log("Raw API Response:", response.data);
// Validasi bahwa `response.data` adalah array dan memiliki elemen pertama
if (!response.data || !Array.isArray(response.data) || response.data.length === 0) {
console.error("Invalid API response structure:", response.data);
return [];
}
const metricsData = response.data[0]; // Ambil object pertama dari array
// Pastikan objek memiliki properti yang dibutuhkan
if (!metricsData.monitor_response_time || !metricsData.monitor_response_time.metrics) {
console.error("Missing 'monitor_response_time' in response:", metricsData);
return [];
}
if (!metricsData.monitor_status || !metricsData.monitor_status.metrics) {
console.error("Missing 'monitor_status' in response:", metricsData);
return [];
}
if (!metricsData.monitor_cert_is_valid || !metricsData.monitor_cert_is_valid.metrics) {
console.error("Missing 'monitor_cert_is_valid' in response:", metricsData);
return [];
}
if (!metricsData.monitor_cert_days_remaining || !metricsData.monitor_cert_days_remaining.metrics) {
console.error("Missing 'monitor_cert_days_remaining' in response:", metricsData);
return [];
}
const responseTimes = metricsData.monitor_response_time.metrics;
const statuses = metricsData.monitor_status.metrics;
const certValidations = metricsData.monitor_cert_is_valid.metrics;
const certDaysRemaining = metricsData.monitor_cert_days_remaining.metrics;
// Gabungkan semua data berdasarkan monitor_url
const metrics = responseTimes.map(rt => {
const status = statuses.find(s => s.labels.monitor_url === rt.labels.monitor_url);
const certValid = certValidations.find(c => c.labels.monitor_url === rt.labels.monitor_url);
const certDays = certDaysRemaining.find(d => d.labels.monitor_url === rt.labels.monitor_url);
return {
monitor_name: rt.labels.monitor_name,
monitor_url: rt.labels.monitor_url,
response_time: rt.value,
status: status ? status.value : 0, // Default 0 jika tidak ditemukan
cert_valid: certValid ? certValid.value : 0, // Default 0 jika tidak ditemukan
cert_days_remaining: certDays ? certDays.value : "N/A" // Default "N/A" jika tidak ditemukan
};
});
console.log("Final Metrics Data:", metrics);
return metrics;
} catch (error) {
console.error("Error fetching metrics:", error);
return [];
}
};