This commit is contained in:
Alex Holliday
2025-02-24 14:33:25 -08:00
parent c94c0261ab
commit 88fc158d9f
23 changed files with 251 additions and 228 deletions
+2 -6
View File
@@ -31,9 +31,7 @@ const ActionsMenu = ({
event.preventDefault();
event.stopPropagation();
let monitor = { _id: actions.id };
const action = await dispatch(
deleteUptimeMonitor({ monitor })
);
const action = await dispatch(deleteUptimeMonitor({ monitor }));
if (action.meta.requestStatus === "fulfilled") {
setIsOpen(false); // close modal
updateRowCallback();
@@ -46,9 +44,7 @@ const ActionsMenu = ({
const handlePause = async () => {
try {
setIsLoading(true);
const action = await dispatch(
pauseUptimeMonitor({ monitorId: monitor._id })
);
const action = await dispatch(pauseUptimeMonitor({ monitorId: monitor._id }));
if (pauseUptimeMonitor.fulfilled.match(action)) {
const state = action?.payload?.data.isActive === false ? "paused" : "resumed";
createToast({ body: `Monitor ${state} successfully.` });
+8 -26
View File
@@ -13,10 +13,8 @@ import { RowContainer } from "../StandardContainer";
* @param {number} props.headerLevel - Font characteristic of the header
* @param {string} props.subHeaderText - Subheader text
* @param {number} props.subHeaderLevel - Font characteristic of the subheader
* @param {string} props.rightCatagoryTitle - Message for right section
* @param {number} props.rightCatagoryTitleLevel - Font characteristic of the right section header
* @param {string} props.rightDescription - Description for right section
* @param {number} props.rightDescriptionLevel - Font characteristic of the right section description
* @param {string} props.alignItems - Align items
* @param {node} props.children - Children
* @returns {JSX.Element} The rendered component
*/
@@ -25,16 +23,14 @@ const SubHeader = ({
headerLevel = 1,
subHeaderText,
subHeaderLevel = 1,
rightCatagoryTitle,
rightCatagoryTitleLevel = 2,
rightDescription,
rightDescriptionLevel = 2,
alignItems = "center",
children,
}) => {
const theme = useTheme();
return (
<Stack
direction="row"
alignItems={alignItems}
justifyContent="space-between"
>
<Stack direction={"column"}>
@@ -58,19 +54,7 @@ const SubHeader = ({
{subHeaderText}
</Typography>
</Stack>
{rightCatagoryTitle && (
<RowContainer sx={{ width: "20%" }}>
<Stack>
<Typography variant={`body${rightCatagoryTitleLevel}`}>
{rightCatagoryTitle}
</Typography>
<Typography variant={`h${rightDescriptionLevel}`}>
{rightDescription}
</Typography>
</Stack>
</RowContainer>
)}
{children}
</Stack>
);
};
@@ -80,10 +64,8 @@ SubHeader.propTypes = {
headerLevel: PropTypes.number,
subHeaderText: PropTypes.string,
subHeaderLevel: PropTypes.number,
rightCatagoryTitle: PropTypes.string,
rightCatagoryTitleLevel: PropTypes.number,
rightDescription: PropTypes.string,
rightDescriptionLevel: PropTypes.number,
alignItems: PropTypes.string,
children: PropTypes.node,
};
export default SubHeader;
+1 -1
View File
@@ -80,7 +80,7 @@ export const deleteUser = createAsyncThunk("auth/delete", async (_, thunkApi) =>
const user = thunkApi.getState().auth.user;
try {
const res = await networkService.deleteUser({ userId: user._id, });
const res = await networkService.deleteUser({ userId: user._id });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -32,7 +32,9 @@ export const checkInfrastructureEndpointResolution = createAsyncThunk(
async (data, thunkApi) => {
try {
const { monitorURL } = data;
const res = await networkService.checkEndpointResolution({ monitorURL: monitorURL, });
const res = await networkService.checkEndpointResolution({
monitorURL: monitorURL,
});
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -127,7 +129,7 @@ export const deleteInfrastructureMonitor = createAsyncThunk(
async (data, thunkApi) => {
try {
const { monitor } = data;
const res = await networkService.deleteMonitorById({ monitorId: monitor._id, });
const res = await networkService.deleteMonitorById({ monitorId: monitor._id });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -147,7 +149,7 @@ export const pauseInfrastructureMonitor = createAsyncThunk(
async (data, thunkApi) => {
try {
const { monitorId } = data;
const res = await networkService.pauseMonitorById({ monitorId: monitorId, });
const res = await networkService.pauseMonitorById({ monitorId: monitorId });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -167,7 +169,7 @@ export const deleteInfrastructureMonitorChecksByTeamId = createAsyncThunk(
async (data, thunkApi) => {
try {
const { teamId } = data;
const res = await networkService.deleteChecksByTeamId({ teamId: teamId, });
const res = await networkService.deleteChecksByTeamId({ teamId: teamId });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -12,7 +12,7 @@ export const createPageSpeed = createAsyncThunk(
async (data, thunkApi) => {
try {
const { monitor } = data;
const res = await networkService.createMonitor({ monitor: monitor, });
const res = await networkService.createMonitor({ monitor: monitor });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -32,7 +32,9 @@ export const checkEndpointResolution = createAsyncThunk(
async (data, thunkApi) => {
try {
const { monitorURL } = data;
const res = await networkService.checkEndpointResolution({ monitorURL: monitorURL, });
const res = await networkService.checkEndpointResolution({
monitorURL: monitorURL,
});
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -52,7 +54,7 @@ export const getPagespeedMonitorById = createAsyncThunk(
async (data, thunkApi) => {
try {
const { monitorId } = data;
const res = await networkService.getMonitorById({ monitorId: monitorId, });
const res = await networkService.getMonitorById({ monitorId: monitorId });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -124,7 +126,7 @@ export const deletePageSpeed = createAsyncThunk(
async (data, thunkApi) => {
try {
const { monitor } = data;
const res = await networkService.deleteMonitorById({ monitorId: monitor._id, });
const res = await networkService.deleteMonitorById({ monitorId: monitor._id });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -143,7 +145,7 @@ export const pausePageSpeed = createAsyncThunk(
async (data, thunkApi) => {
try {
const { monitorId } = data;
const res = await networkService.pauseMonitorById({ monitorId: monitorId, });
const res = await networkService.pauseMonitorById({ monitorId: monitorId });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
+1 -1
View File
@@ -47,7 +47,7 @@ export const updateAppSettings = createAsyncThunk(
systemEmailAddress: settings.systemEmailAddress,
systemEmailPassword: settings.systemEmailPassword,
};
const res = await networkService.updateAppSettings({ settings: parsedSettings, });
const res = await networkService.updateAppSettings({ settings: parsedSettings });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -32,7 +32,9 @@ export const checkEndpointResolution = createAsyncThunk(
async (data, thunkApi) => {
try {
const { monitorURL } = data;
const res = await networkService.checkEndpointResolution({ monitorURL: monitorURL, });
const res = await networkService.checkEndpointResolution({
monitorURL: monitorURL,
});
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -52,7 +54,7 @@ export const getUptimeMonitorById = createAsyncThunk(
async (data, thunkApi) => {
try {
const { monitorId } = data;
const res = await networkService.getMonitorById({ monitorId: monitorId, });
const res = await networkService.getMonitorById({ monitorId: monitorId });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -104,7 +106,7 @@ export const deleteUptimeMonitor = createAsyncThunk(
async (data, thunkApi) => {
try {
const { monitor } = data;
const res = await networkService.deleteMonitorById({ monitorId: monitor._id, });
const res = await networkService.deleteMonitorById({ monitorId: monitor._id });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -124,7 +126,7 @@ export const pauseUptimeMonitor = createAsyncThunk(
async (data, thunkApi) => {
try {
const { monitorId } = data;
const res = await networkService.pauseMonitorById({ monitorId: monitorId, });
const res = await networkService.pauseMonitorById({ monitorId: monitorId });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -144,7 +146,7 @@ export const deleteMonitorChecksByTeamId = createAsyncThunk(
async (data, thunkApi) => {
try {
const { teamId } = data;
const res = await networkService.deleteChecksByTeamId({ teamId: teamId, });
const res = await networkService.deleteChecksByTeamId({ teamId: teamId });
return res.data;
} catch (error) {
if (error.response && error.response.data) {
@@ -110,6 +110,8 @@ const useSubscribeToDetails = ({ monitorId, isPublic, isPublished, dateRange })
networkError,
devices,
isLoading,
isPublic,
isPublished,
]);
useEffect(() => {
@@ -56,7 +56,7 @@ const useSubscribeToMonitors = () => {
});
setNetworkError(true);
}
}, [user, getMonitorWithPercentage, theme]);
}, [user, getMonitorWithPercentage, theme, isLoading]);
return [isLoading, networkError, monitors, monitorsSummary, filteredMonitors];
};
export { useSubscribeToMonitors };
@@ -17,6 +17,7 @@ import PeopleAltOutlinedIcon from "@mui/icons-material/PeopleAltOutlined";
import InfoBox from "../../../Components/InfoBox";
import StatusHeader from "../../DistributedUptime/Details/Components/StatusHeader";
import MonitorsList from "./Components/MonitorsList";
import { RowContainer } from "../../../Components/StandardContainer";
//Utils
import { useTheme } from "@mui/material/styles";
@@ -162,19 +163,27 @@ const DistributedUptimeStatus = () => {
url={url}
type="distributed"
/>
<StatusHeader
monitor={monitor}
connectionStatus={connectionStatus}
elementToCapture={elementToCapture}
/>
<SubHeader
headerText={t("distributedStatusHeaderText")}
<SubHeader
headerText={t("distributedStatusHeaderText")}
subHeaderText={t("distributedStatusSubHeaderText")}
rightCatagoryTitle={t("distributedRightCatagoryTitle")}
rightDescription = {t("distributedRightCatagoryDescription")}
/>
>
<RowContainer>
<Stack>
<Typography variant={`body2`}>
{t("distributedRightCatagoryTitle")}
</Typography>
<Typography variant={`h2`}>
{t("distributedRightCatagoryDescription")}
</Typography>
</Stack>
</RowContainer>
</SubHeader>
<NextExpectedCheck
lastUpdateTime={monitor?.timeSinceLastCheck ?? 0}
@@ -229,10 +238,18 @@ const DistributedUptimeStatus = () => {
monitor={monitor}
lastUpdateTrigger={lastUpdateTrigger}
/>
<TimeFrameHeader
timeFrame={timeFrame}
setTimeFrame={setTimeFrame}
/>
<SubHeader
headerText={t("distributedStatusServerMonitors")}
subHeaderText={t("distributedStatusServerMonitorsDescription")}
alignItems="end"
>
<TimeFrameHeader
timeFrame={timeFrame}
setTimeFrame={setTimeFrame}
/>
</SubHeader>
<MonitorsList
monitors={statusPage?.subMonitors}
timeFrame={timeFrame}
+1 -3
View File
@@ -147,9 +147,7 @@ const CreateInfrastructureMonitor = () => {
thresholds,
};
const action = await dispatch(
createInfrastructureMonitor({ monitor: form })
);
const action = await dispatch(createInfrastructureMonitor({ monitor: form }));
if (action.meta.requestStatus === "fulfilled") {
createToast({ body: "Infrastructure monitor created successfully!" });
navigate("/infrastructure");
+1 -1
View File
@@ -132,7 +132,7 @@ const Integrations = () => {
>
<Typography component="h1">Integrations</Typography>
<Typography mb={theme.spacing(12)}>
Connect Checkmate to your favorite service.
Connect Prism to your favorite service.
</Typography>
<Grid
container
+18 -8
View File
@@ -70,7 +70,7 @@ const Configure = () => {
const expectedValuePlaceholders = {
regex: "^[\w.-]+@gmail.com$",
equal: "janet@gmail.com",
include: "@gmail.com"
include: "@gmail.com",
};
useEffect(() => {
@@ -451,8 +451,8 @@ const Configure = () => {
onChange={(event) => handleChange(event, "interval")}
items={frequencies}
/>
{
monitor.type === "http" && <>
{monitor.type === "http" && (
<>
<Select
id="match-method"
label="Match Method"
@@ -466,7 +466,9 @@ const Configure = () => {
id="expected-value"
label="Expected value"
isOptional={true}
placeholder={expectedValuePlaceholders[monitor.matchMethod || "equal"]}
placeholder={
expectedValuePlaceholders[monitor.matchMethod || "equal"]
}
value={monitor.expectedValue}
onChange={(event) => handleChange(event, "expectedValue")}
error={errors["expectedValue"] ? true : false}
@@ -477,7 +479,8 @@ const Configure = () => {
color={theme.palette.primary.contrastTextTertiary}
opacity={0.8}
>
The expected value is used to match against response result, and the match determines the status.
The expected value is used to match against response result, and
the match determines the status.
</Typography>
</Stack>
<Stack>
@@ -497,15 +500,22 @@ const Configure = () => {
color={theme.palette.primary.contrastTextTertiary}
opacity={0.8}
>
This expression will be evaluated against the reponse JSON data and the result will be used to match against the expected value. See&nbsp;
<Typography component="a" href="https://jmespath.org/" target="_blank" color="info">
This expression will be evaluated against the reponse JSON data
and the result will be used to match against the expected value.
See&nbsp;
<Typography
component="a"
href="https://jmespath.org/"
target="_blank"
color="info"
>
jmespath.org
</Typography>
&nbsp;for query language documentation.
</Typography>
</Stack>
</>
}
)}
</Stack>
</ConfigBox>
<Stack
+17 -8
View File
@@ -42,7 +42,7 @@ const CreateMonitor = () => {
const expectedValuePlaceholders = {
regex: "^[\w.-]+@gmail.com$",
equal: "janet@gmail.com",
include: "@gmail.com"
include: "@gmail.com",
};
const monitorTypeMaps = {
@@ -416,8 +416,8 @@ const CreateMonitor = () => {
onChange={(event) => handleChange(event, "interval")}
items={SELECT_VALUES}
/>
{
monitor.type === "http" && <>
{monitor.type === "http" && (
<>
<Select
id="match-method"
label="Match Method"
@@ -431,7 +431,9 @@ const CreateMonitor = () => {
id="expected-value"
label="Expected value"
isOptional={true}
placeholder={expectedValuePlaceholders[monitor.matchMethod || "equal"]}
placeholder={
expectedValuePlaceholders[monitor.matchMethod || "equal"]
}
value={monitor.expectedValue}
onChange={(event) => handleChange(event, "expectedValue")}
error={errors["expectedValue"] ? true : false}
@@ -442,7 +444,8 @@ const CreateMonitor = () => {
color={theme.palette.primary.contrastTextTertiary}
opacity={0.8}
>
The expected value is used to match against response result, and the match determines the status.
The expected value is used to match against response result, and the
match determines the status.
</Typography>
</Stack>
<Stack>
@@ -462,15 +465,21 @@ const CreateMonitor = () => {
color={theme.palette.primary.contrastTextTertiary}
opacity={0.8}
>
This expression will be evaluated against the reponse JSON data and the result will be used to match against the expected value. See&nbsp;
<Typography component="a" href="https://jmespath.org/" target="_blank" color="info">
This expression will be evaluated against the reponse JSON data and
the result will be used to match against the expected value. See&nbsp;
<Typography
component="a"
href="https://jmespath.org/"
target="_blank"
color="info"
>
jmespath.org
</Typography>
&nbsp;for query language documentation.
</Typography>
</Stack>
</>
}
)}
</Stack>
</ConfigBox>
<Stack
@@ -2,12 +2,7 @@ import { useState } from "react";
import { useEffect } from "react";
import { networkService } from "../../../../main";
import { createToast } from "../../../../Utils/toastUtils";
export const useChecksFetch = ({
monitorId,
dateRange,
page,
rowsPerPage,
}) => {
export const useChecksFetch = ({ monitorId, dateRange, page, rowsPerPage }) => {
const [checks, setChecks] = useState(undefined);
const [checksCount, setChecksCount] = useState(undefined);
const [isLoading, setIsLoading] = useState(false);
@@ -63,6 +63,7 @@ export const useMonitorFetch = ({
rowsPerPage,
theme,
triggerUpdate,
getMonitorWithPercentage,
]);
return {
monitors,
-1
View File
@@ -124,7 +124,6 @@ const UptimeMonitors = () => {
!monitorsAreLoading &&
(totalMonitors === 0 || typeof totalMonitors === "undefined")
) {
return (
<Fallback
vowelStart={true}
+6 -6
View File
@@ -801,7 +801,7 @@ class NetworkService {
"https://api.github.com/repos/bluewave-labs/bluewave-uptime/releases/latest",
{
headers: {
Authorization: null,
Authorization: null, // No authorization header for this request
},
}
);
@@ -923,7 +923,7 @@ class NetworkService {
});
}
async getDistributedStatusPageByUrl(config) {
const { authToken, url, type, timeFrame } = config;
const { url, type, timeFrame } = config;
const params = new URLSearchParams();
params.append("type", type);
params.append("timeFrame", timeFrame);
@@ -931,7 +931,6 @@ class NetworkService {
`/status-page/distributed/${url}?${params.toString()}`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
},
}
@@ -985,18 +984,19 @@ class NetworkService {
URL.revokeObjectURL(form.logo.src);
}
}
if (isCreate) {
return this.axiosInstance.post(`/status-page`, fd);
return this.axiosInstance.post(`/status-page`, fd, {});
}
return this.axiosInstance.put(`/status-page`, fd);
return this.axiosInstance.put(`/status-page`, fd, {});
}
async deleteStatusPage(config) {
const { url } = config;
const encodedUrl = encodeURIComponent(url);
return this.axiosInstance.delete(`/status-page/${encodedUrl}`);
return this.axiosInstance.delete(`/status-page/${encodedUrl}`, {});
}
}
+67 -67
View File
@@ -1,68 +1,68 @@
{
"dontHaveAccount": "Don't have account",
"email": "E-mail",
"forgotPassword": "Forgot Password",
"password": "password",
"signUp": "Sign up",
"submit": "Submit",
"title": "Title",
"continue": "Continue",
"enterEmail": "Enter your email",
"authLoginTitle": "Log In",
"authLoginEnterPassword": "Enter your password",
"commonPassword": "Password",
"createPassword": "Create your password",
"createAPassword": "Create a password",
"commonBack": "Back",
"authForgotPasswordTitle": "Forgot password?",
"authForgotPasswordResetPassword": "Reset password",
"authRegisterAlreadyHaveAccount": "Already have an account?",
"commonAppName": "Checkmate",
"authLoginEnterEmail": "Enter your email",
"authRegisterTitle": "Create an account",
"authRegisterStepOneTitle": "Create your account",
"authRegisterStepOneDescription": "Enter your details to get started",
"authRegisterStepTwoTitle": "Set up your profile",
"authRegisterStepTwoDescription": "Tell us more about yourself",
"authRegisterStepThreeTitle": "Almost done!",
"authRegisterStepThreeDescription": "Review your information",
"authForgotPasswordDescription": "No worries, we'll send you reset instructions.",
"authForgotPasswordSendInstructions": "Send instructions",
"authForgotPasswordBackTo": "Back to",
"authCheckEmailTitle": "Check your email",
"authCheckEmailDescription": "We sent a password reset link to {{email}}",
"authCheckEmailResendEmail": "Resend email",
"authCheckEmailBackTo": "Back to",
"goBackTo": "Go back to",
"authCheckEmailDidntReceiveEmail": "Didn't receive the email?",
"authCheckEmailClickToResend": "Click to resend",
"authSetNewPasswordTitle": "Set new password",
"authSetNewPasswordDescription": "Your new password must be different from previously used passwords.",
"authSetNewPasswordNewPassword": "New password",
"authSetNewPasswordConfirmPassword": "Confirm password",
"confirmPassword": "Confirm your password",
"authSetNewPasswordResetPassword": "Reset password",
"authSetNewPasswordBackTo": "Back to",
"authPasswordMustBeAtLeast": "Must be at least",
"authPasswordCharactersLong": "8 characters long",
"authPasswordMustContainAtLeast": "Must contain at least",
"authPasswordSpecialCharacter": "one special character",
"authPasswordOneNumber": "one number",
"authPasswordUpperCharacter": "one upper character",
"authPasswordLowerCharacter": "one lower character",
"authPasswordConfirmAndPassword": "Confirm password and password",
"authPasswordMustMatch": "must match",
"authRegisterCreateAccount": "Create your account to get started",
"authRegisterCreateSuperAdminAccount": "Create your Super admin account to get started",
"authRegisterSignUpWithEmail": "Sign up with Email",
"authRegisterBySigningUp": "By signing up, you agree to our",
"monitorStatusUp": "Monitor {name} ({url}) is now UP and responding",
"monitorStatusDown": "Monitor {name} ({url}) is DOWN and not responding",
"webhookSendSuccess": "Webhook notification sent successfully",
"webhookSendError": "Error sending webhook notification to {platform}",
"webhookUnsupportedPlatform": "Unsupported platform: {platform}",
"distributedStatusHeaderText": "Real-time, real-device coverage",
"distributedStatusSubHeaderText": "Powered by millions devices worldwide, view a system performance by global region, country or city",
"distributedRightCatagoryTitle" : "Monitor",
"distributedRightCatagoryDescription" : "Mainnet Beta Cluster"
}
"dontHaveAccount": "Don't have account",
"email": "E-mail",
"forgotPassword": "Forgot Password",
"password": "password",
"signUp": "Sign up",
"submit": "Submit",
"title": "Title",
"continue": "Continue",
"enterEmail": "Enter your email",
"authLoginTitle": "Log In",
"authLoginEnterPassword": "Enter your password",
"commonPassword": "Password",
"createPassword": "Create your password",
"createAPassword": "Create a password",
"commonBack": "Back",
"authForgotPasswordTitle": "Forgot password?",
"authForgotPasswordResetPassword": "Reset password",
"authRegisterAlreadyHaveAccount": "Already have an account?",
"commonAppName": "Checkmate",
"authLoginEnterEmail": "Enter your email",
"authRegisterTitle": "Create an account",
"authRegisterStepOneTitle": "Create your account",
"authRegisterStepOneDescription": "Enter your details to get started",
"authRegisterStepTwoTitle": "Set up your profile",
"authRegisterStepTwoDescription": "Tell us more about yourself",
"authRegisterStepThreeTitle": "Almost done!",
"authRegisterStepThreeDescription": "Review your information",
"authForgotPasswordDescription": "No worries, we'll send you reset instructions.",
"authForgotPasswordSendInstructions": "Send instructions",
"authForgotPasswordBackTo": "Back to",
"authCheckEmailTitle": "Check your email",
"authCheckEmailDescription": "We sent a password reset link to {{email}}",
"authCheckEmailResendEmail": "Resend email",
"authCheckEmailBackTo": "Back to",
"goBackTo": "Go back to",
"authCheckEmailDidntReceiveEmail": "Didn't receive the email?",
"authCheckEmailClickToResend": "Click to resend",
"authSetNewPasswordTitle": "Set new password",
"authSetNewPasswordDescription": "Your new password must be different from previously used passwords.",
"authSetNewPasswordNewPassword": "New password",
"authSetNewPasswordConfirmPassword": "Confirm password",
"confirmPassword": "Confirm your password",
"authSetNewPasswordResetPassword": "Reset password",
"authSetNewPasswordBackTo": "Back to",
"authPasswordMustBeAtLeast": "Must be at least",
"authPasswordCharactersLong": "8 characters long",
"authPasswordMustContainAtLeast": "Must contain at least",
"authPasswordSpecialCharacter": "one special character",
"authPasswordOneNumber": "one number",
"authPasswordUpperCharacter": "one upper character",
"authPasswordLowerCharacter": "one lower character",
"authPasswordConfirmAndPassword": "Confirm password and password",
"authPasswordMustMatch": "must match",
"authRegisterCreateAccount": "Create your account to get started",
"authRegisterCreateSuperAdminAccount": "Create your Super admin account to get started",
"authRegisterSignUpWithEmail": "Sign up with Email",
"authRegisterBySigningUp": "By signing up, you agree to our",
"monitorStatusUp": "Monitor {name} ({url}) is now UP and responding",
"monitorStatusDown": "Monitor {name} ({url}) is DOWN and not responding",
"webhookSendSuccess": "Webhook notification sent successfully",
"webhookSendError": "Error sending webhook notification to {platform}",
"webhookUnsupportedPlatform": "Unsupported platform: {platform}",
"distributedStatusHeaderText": "Real-time, real-device coverage",
"distributedStatusSubHeaderText": "Powered by millions devices worldwide, view a system performance by global region, country or city",
"distributedRightCatagoryTitle": "Monitor",
"distributedRightCatagoryDescription": "Mainnet Beta Cluster"
}
+62 -62
View File
@@ -1,63 +1,63 @@
{
"dontHaveAccount": "Hesabınız yok mu",
"email": "E-posta",
"forgotPassword": "Parolamı unuttum",
"password": "Parola",
"signUp": "Kayıt Ol",
"submit": "Gönder",
"title": "Başlık",
"continue": "Devam Et",
"enterEmail": "E-posta adresinizi girin",
"authLoginTitle": "Giriş Yap",
"authLoginEnterPassword": "Parolanızı girin",
"commonPassword": "Parola",
"createPassword": "Parolanızı oluşturun",
"createAPassword": "Bir parola oluşturun",
"commonBack": "Geri",
"authForgotPasswordTitle": "Parolanızı mı unuttunuz?",
"authForgotPasswordResetPassword": "Parola sıfırla",
"authRegisterAlreadyHaveAccount": "Zaten hesabınız var mı?",
"commonAppName": "Checkmate",
"authLoginEnterEmail": "E-posta adresinizi girin",
"authRegisterTitle": "Hesap oluştur",
"authRegisterStepOneTitle": "Hesabınızı oluşturun",
"authRegisterStepOneDescription": "Başlamak için bilgilerinizi girin",
"authRegisterStepTwoTitle": "Profilinizi ayarlayın",
"authRegisterStepTwoDescription": "Kendiniz hakkında daha fazla bilgi verin",
"authRegisterStepThreeTitle": "Neredeyse bitti!",
"authRegisterStepThreeDescription": "Bilgilerinizi gözden geçirin",
"authForgotPasswordDescription": "Endişelenmeyin, size sıfırlama talimatlarını göndereceğiz.",
"authForgotPasswordSendInstructions": "Talimatları gönder",
"authForgotPasswordBackTo": "Geri dön",
"authCheckEmailTitle": "E-postanızı kontrol edin",
"authCheckEmailDescription": "{{email}} adresine şifre sıfırlama bağlantısı gönderdik",
"authCheckEmailResendEmail": "E-postayı yeniden gönder",
"authCheckEmailBackTo": "Geri dön",
"goBackTo": "Geri dön",
"authCheckEmailDidntReceiveEmail": "E-posta almadınız mı?",
"authCheckEmailClickToResend": "Yeniden göndermek için tıklayın",
"authSetNewPasswordTitle": "Yeni şifre belirle",
"authSetNewPasswordDescription": "Yeni şifreniz daha önce kullanılan şifrelerden farklı olmalıdır.",
"authSetNewPasswordNewPassword": "Yeni şifre",
"authSetNewPasswordConfirmPassword": "Parolayı onayla",
"confirmPassword": "Parolanızı onaylayın",
"authSetNewPasswordResetPassword": "Parola sıfırla",
"authSetNewPasswordBackTo": "Geri dön",
"authPasswordMustBeAtLeast": "En az",
"authPasswordCharactersLong": "8 karakter uzunluğunda olmalı",
"authPasswordMustContainAtLeast": "En az içermeli",
"authPasswordSpecialCharacter": "bir özel karakter",
"authPasswordOneNumber": "bir rakam",
"authPasswordUpperCharacter": "bir büyük harf",
"authPasswordLowerCharacter": "bir küçük harf",
"authPasswordConfirmAndPassword": "Onay şifresi ve şifre",
"authPasswordMustMatch": "eşleşmelidir",
"authRegisterCreateAccount": "Hesap oluşturmak için devam et",
"authRegisterCreateSuperAdminAccount": "Super admin hesabınızı oluşturmak için devam edin",
"authRegisterSignUpWithEmail": "E-posta ile kayıt ol",
"authRegisterBySigningUp": "Kayıt olarak, aşağıdaki şartları kabul ediyorsunuz:",
"distributedStatusHeaderText": "Gerçek zamanlı, Gerçek cihazlar kapsamı",
"distributedStatusSubHeaderText": "Dünya çapında milyonlarca cihaz tarafından desteklenen sistem performansını küresel bölgeye, ülkeye veya şehre göre görüntüleyin",
"distributedRightCatagoryTitle" : "Monitör",
"distributedRightCatagoryDescription" : "Mainnet Beta Kümesi"
}
"dontHaveAccount": "Hesabınız yok mu",
"email": "E-posta",
"forgotPassword": "Parolamı unuttum",
"password": "Parola",
"signUp": "Kayıt Ol",
"submit": "Gönder",
"title": "Başlık",
"continue": "Devam Et",
"enterEmail": "E-posta adresinizi girin",
"authLoginTitle": "Giriş Yap",
"authLoginEnterPassword": "Parolanızı girin",
"commonPassword": "Parola",
"createPassword": "Parolanızı oluşturun",
"createAPassword": "Bir parola oluşturun",
"commonBack": "Geri",
"authForgotPasswordTitle": "Parolanızı mı unuttunuz?",
"authForgotPasswordResetPassword": "Parola sıfırla",
"authRegisterAlreadyHaveAccount": "Zaten hesabınız var mı?",
"commonAppName": "Checkmate",
"authLoginEnterEmail": "E-posta adresinizi girin",
"authRegisterTitle": "Hesap oluştur",
"authRegisterStepOneTitle": "Hesabınızı oluşturun",
"authRegisterStepOneDescription": "Başlamak için bilgilerinizi girin",
"authRegisterStepTwoTitle": "Profilinizi ayarlayın",
"authRegisterStepTwoDescription": "Kendiniz hakkında daha fazla bilgi verin",
"authRegisterStepThreeTitle": "Neredeyse bitti!",
"authRegisterStepThreeDescription": "Bilgilerinizi gözden geçirin",
"authForgotPasswordDescription": "Endişelenmeyin, size sıfırlama talimatlarını göndereceğiz.",
"authForgotPasswordSendInstructions": "Talimatları gönder",
"authForgotPasswordBackTo": "Geri dön",
"authCheckEmailTitle": "E-postanızı kontrol edin",
"authCheckEmailDescription": "{{email}} adresine şifre sıfırlama bağlantısı gönderdik",
"authCheckEmailResendEmail": "E-postayı yeniden gönder",
"authCheckEmailBackTo": "Geri dön",
"goBackTo": "Geri dön",
"authCheckEmailDidntReceiveEmail": "E-posta almadınız mı?",
"authCheckEmailClickToResend": "Yeniden göndermek için tıklayın",
"authSetNewPasswordTitle": "Yeni şifre belirle",
"authSetNewPasswordDescription": "Yeni şifreniz daha önce kullanılan şifrelerden farklı olmalıdır.",
"authSetNewPasswordNewPassword": "Yeni şifre",
"authSetNewPasswordConfirmPassword": "Parolayı onayla",
"confirmPassword": "Parolanızı onaylayın",
"authSetNewPasswordResetPassword": "Parola sıfırla",
"authSetNewPasswordBackTo": "Geri dön",
"authPasswordMustBeAtLeast": "En az",
"authPasswordCharactersLong": "8 karakter uzunluğunda olmalı",
"authPasswordMustContainAtLeast": "En az içermeli",
"authPasswordSpecialCharacter": "bir özel karakter",
"authPasswordOneNumber": "bir rakam",
"authPasswordUpperCharacter": "bir büyük harf",
"authPasswordLowerCharacter": "bir küçük harf",
"authPasswordConfirmAndPassword": "Onay şifresi ve şifre",
"authPasswordMustMatch": "eşleşmelidir",
"authRegisterCreateAccount": "Hesap oluşturmak için devam et",
"authRegisterCreateSuperAdminAccount": "Super admin hesabınızı oluşturmak için devam edin",
"authRegisterSignUpWithEmail": "E-posta ile kayıt ol",
"authRegisterBySigningUp": "Kayıt olarak, aşağıdaki şartları kabul ediyorsunuz:",
"distributedStatusHeaderText": "Gerçek zamanlı, Gerçek cihazlar kapsamı",
"distributedStatusSubHeaderText": "Dünya çapında milyonlarca cihaz tarafından desteklenen sistem performansını küresel bölgeye, ülkeye veya şehre göre görüntüleyin",
"distributedRightCatagoryTitle": "Monitör",
"distributedRightCatagoryDescription": "Mainnet Beta Kümesi"
}