mirror of
https://github.com/Dvorinka/beszel.git
synced 2026-06-03 21:02:56 +00:00
feat(hub,site): enhance domain management and monitor UI
Build Docker images / Hub (push) Failing after 54s
Build Docker images / Hub (push) Failing after 54s
Implement manual domain expiry overrides, improve subdomain discovery via CT logs, and enhance the monitoring dashboard with favicons and configurable display options. hub: - allow manual expiry and creation date overrides in domain API when WHOIS lookup fails - implement JSON parsing for crt.sh certificate transparency log searches in subdomain discovery - update monitor API routes to use curly brace syntax for path parameters site: - add manual registration date and period inputs to domain dialog - implement monitor favicon support using Google's favicon service - add configurable display options (uptime pills, heartbeat dots) to monitors table - update localization files to include new UI elements
This commit is contained in:
@@ -128,6 +128,9 @@ func (h *APIHandler) createDomain(e *core.RequestEvent) error {
|
||||
NotifyOnSSL bool `json:"notify_on_ssl_expiry"`
|
||||
NotifyOnDNS bool `json:"notify_on_dns_change"`
|
||||
NotifyOnReg bool `json:"notify_on_registrar_change"`
|
||||
// Manual expiry override when WHOIS fails
|
||||
ExpiryDate string `json:"expiry_date,omitempty"`
|
||||
CreationDate string `json:"creation_date,omitempty"`
|
||||
}
|
||||
if err := json.NewDecoder(e.Request.Body).Decode(&req); err != nil {
|
||||
return e.BadRequestError("invalid request body", err)
|
||||
@@ -179,6 +182,7 @@ func (h *APIHandler) createDomain(e *core.RequestEvent) error {
|
||||
record.Set("user", authRecord.Id)
|
||||
|
||||
// Auto-lookup if requested
|
||||
lookupHadExpiry := false
|
||||
if req.AutoLookup {
|
||||
lookupSvc := whois.NewLookupService("")
|
||||
ctx := e.Request.Context()
|
||||
@@ -188,6 +192,7 @@ func (h *APIHandler) createDomain(e *core.RequestEvent) error {
|
||||
// Calculate status based on lookup results
|
||||
status := domain.DomainStatusUnknown
|
||||
if domainData.ExpiryDate != nil {
|
||||
lookupHadExpiry = true
|
||||
daysUntil := int(time.Until(*domainData.ExpiryDate).Hours() / 24)
|
||||
if daysUntil < 0 {
|
||||
status = domain.DomainStatusExpired
|
||||
@@ -204,6 +209,29 @@ func (h *APIHandler) createDomain(e *core.RequestEvent) error {
|
||||
}
|
||||
}
|
||||
|
||||
// Apply manual expiry/creation dates if WHOIS didn't find them
|
||||
if !lookupHadExpiry {
|
||||
if req.ExpiryDate != "" {
|
||||
if t, err := time.Parse("2006-01-02", req.ExpiryDate); err == nil {
|
||||
record.Set("expiry_date", t)
|
||||
// Recalculate status with manual expiry
|
||||
daysUntil := int(time.Until(t).Hours() / 24)
|
||||
status := domain.DomainStatusActive
|
||||
if daysUntil < 0 {
|
||||
status = domain.DomainStatusExpired
|
||||
} else if daysUntil <= req.AlertDaysBefore {
|
||||
status = domain.DomainStatusExpiring
|
||||
}
|
||||
record.Set("status", status)
|
||||
}
|
||||
}
|
||||
if req.CreationDate != "" {
|
||||
if t, err := time.Parse("2006-01-02", req.CreationDate); err == nil {
|
||||
record.Set("creation_date", t)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err := h.app.Save(record); err != nil {
|
||||
return e.InternalServerError("failed to create domain", err)
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package domains
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
@@ -143,21 +144,73 @@ func (sd *SubdomainDiscovery) dnsBruteForce(ctx context.Context, domainName stri
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
// ctLogSearch searches certificate transparency logs
|
||||
// ctLogSearch searches certificate transparency logs via crt.sh
|
||||
func (sd *SubdomainDiscovery) ctLogSearch(ctx context.Context, domainName string, results chan<- DiscoveryResult) {
|
||||
// Query crt.sh for certificates
|
||||
url := fmt.Sprintf("https://crt.sh/?q=%%.%s&output=json", domainName)
|
||||
|
||||
resp, err := sd.client.Get(url)
|
||||
req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
|
||||
if err != nil {
|
||||
log.Printf("[subdomain-discovery] CT log search failed for %s: %v", domainName, err)
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := sd.client.Do(req)
|
||||
if err != nil {
|
||||
log.Printf("[subdomain-discovery] CT log search failed for %s: %v", domainName, err)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// Parse response (simplified - in production would parse JSON)
|
||||
// For now, just log that we attempted this
|
||||
log.Printf("[subdomain-discovery] CT log search attempted for %s (status: %d)", domainName, resp.StatusCode)
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
log.Printf("[subdomain-discovery] CT log search returned status %d for %s", resp.StatusCode, domainName)
|
||||
return
|
||||
}
|
||||
|
||||
// Parse crt.sh JSON response
|
||||
var entries []struct {
|
||||
NameValue string `json:"name_value"`
|
||||
}
|
||||
if err := json.NewDecoder(resp.Body).Decode(&entries); err != nil {
|
||||
log.Printf("[subdomain-discovery] Failed to parse CT log response for %s: %v", domainName, err)
|
||||
return
|
||||
}
|
||||
|
||||
seen := make(map[string]bool)
|
||||
for _, entry := range entries {
|
||||
// crt.sh returns one name_value per line, may contain wildcards or multiple names
|
||||
names := strings.Split(entry.NameValue, "\n")
|
||||
for _, name := range names {
|
||||
name = strings.TrimSpace(name)
|
||||
if name == "" || name == domainName {
|
||||
continue
|
||||
}
|
||||
// Remove wildcard prefix
|
||||
name = strings.TrimPrefix(name, "*.")
|
||||
// Only include subdomains of the target domain
|
||||
if !strings.HasSuffix(name, "."+domainName) {
|
||||
continue
|
||||
}
|
||||
subdomain := strings.TrimSuffix(name, "."+domainName)
|
||||
if subdomain == "" || seen[subdomain] {
|
||||
continue
|
||||
}
|
||||
seen[subdomain] = true
|
||||
|
||||
// Try to resolve IPs
|
||||
ips, _ := net.LookupHost(name)
|
||||
|
||||
results <- DiscoveryResult{
|
||||
Subdomain: subdomain,
|
||||
FullDomain: name,
|
||||
IPAddresses: ips,
|
||||
Source: "certificate",
|
||||
FoundAt: time.Now(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.Printf("[subdomain-discovery] CT log search found %d unique subdomains for %s", len(seen), domainName)
|
||||
}
|
||||
|
||||
// patternEnumeration enumerates common subdomain patterns
|
||||
|
||||
@@ -40,16 +40,16 @@ func (h *APIHandler) RegisterRoutes(se *core.ServeEvent) {
|
||||
// CRUD endpoints
|
||||
api.GET("", h.listMonitors)
|
||||
api.POST("", h.createMonitor)
|
||||
api.GET("/:id", h.getMonitor)
|
||||
api.PATCH("/:id", h.updateMonitor)
|
||||
api.DELETE("/:id", h.deleteMonitor)
|
||||
api.GET("/{id}", h.getMonitor)
|
||||
api.PATCH("/{id}", h.updateMonitor)
|
||||
api.DELETE("/{id}", h.deleteMonitor)
|
||||
|
||||
// Action endpoints
|
||||
api.POST("/:id/check", h.manualCheck)
|
||||
api.POST("/:id/pause", h.pauseMonitor)
|
||||
api.POST("/:id/resume", h.resumeMonitor)
|
||||
api.GET("/:id/stats", h.getStats)
|
||||
api.GET("/:id/heartbeats", h.getHeartbeats)
|
||||
api.POST("/{id}/check", h.manualCheck)
|
||||
api.POST("/{id}/pause", h.pauseMonitor)
|
||||
api.POST("/{id}/resume", h.resumeMonitor)
|
||||
api.GET("/{id}/stats", h.getStats)
|
||||
api.GET("/{id}/heartbeats", h.getHeartbeats)
|
||||
}
|
||||
|
||||
// HeartbeatSummary represents a minimal heartbeat for the monitor list
|
||||
|
||||
@@ -36,7 +36,7 @@ import {
|
||||
type UpdateDomainRequest,
|
||||
type DomainLookupResult,
|
||||
} from "@/lib/domains"
|
||||
import { Loader2, Search } from "lucide-react"
|
||||
import { Loader2, Search, AlertTriangle, Calendar } from "lucide-react"
|
||||
|
||||
const formSchema = z.object({
|
||||
domain_name: z.string().min(1, "Domain name is required"),
|
||||
@@ -79,6 +79,13 @@ export function DomainDialog({ open, onOpenChange, domain, isEdit = false }: Dom
|
||||
const [activeTab, setActiveTab] = useState("basic")
|
||||
const [lookupData, setLookupData] = useState<DomainLookupResult | null>(null)
|
||||
const [isLookingUp, setIsLookingUp] = useState(false)
|
||||
// Manual expiry inputs when WHOIS fails
|
||||
const [manualRegDate, setManualRegDate] = useState(() => {
|
||||
const today = new Date()
|
||||
return today.toISOString().split("T")[0]
|
||||
})
|
||||
const [manualRegPeriod, setManualRegPeriod] = useState<number>(1)
|
||||
const [manualPurchasePrice, setManualPurchasePrice] = useState<number>(0)
|
||||
|
||||
const form = useForm<FormData>({
|
||||
resolver: zodResolver(formSchema),
|
||||
@@ -163,6 +170,10 @@ export function DomainDialog({ open, onOpenChange, domain, isEdit = false }: Dom
|
||||
quiet_hours_end: "08:00",
|
||||
})
|
||||
setLookupData(null)
|
||||
const today = new Date().toISOString().split("T")[0]
|
||||
setManualRegDate(today)
|
||||
setManualRegPeriod(1)
|
||||
setManualPurchasePrice(0)
|
||||
}
|
||||
}, [open, isEdit, domain, form])
|
||||
|
||||
@@ -207,6 +218,11 @@ export function DomainDialog({ open, onOpenChange, domain, isEdit = false }: Dom
|
||||
try {
|
||||
const data = await lookupDomain(domainName)
|
||||
setLookupData(data)
|
||||
// Reset manual inputs on new lookup
|
||||
const today = new Date().toISOString().split("T")[0]
|
||||
setManualRegDate(today)
|
||||
setManualRegPeriod(1)
|
||||
setManualPurchasePrice(0)
|
||||
toast({ title: "Domain info retrieved successfully" })
|
||||
} catch (error) {
|
||||
toast({
|
||||
@@ -219,6 +235,17 @@ export function DomainDialog({ open, onOpenChange, domain, isEdit = false }: Dom
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate expiry date from registration date + period in years
|
||||
const calculateExpiryDate = (regDateStr: string, years: number): string | null => {
|
||||
const regDate = new Date(regDateStr)
|
||||
if (isNaN(regDate.getTime())) return null
|
||||
const expiry = new Date(regDate)
|
||||
expiry.setFullYear(expiry.getFullYear() + years)
|
||||
// Subtract 1 day (expiry is typically the day before the anniversary)
|
||||
expiry.setDate(expiry.getDate() - 1)
|
||||
return expiry.toISOString().split("T")[0]
|
||||
}
|
||||
|
||||
const onSubmit = (data: FormData) => {
|
||||
const payload: CreateDomainRequest = {
|
||||
domain_name: cleanDomain(data.domain_name),
|
||||
@@ -247,6 +274,19 @@ export function DomainDialog({ open, onOpenChange, domain, isEdit = false }: Dom
|
||||
quiet_hours_end: data.quiet_hours_enabled ? data.quiet_hours_end : undefined,
|
||||
}
|
||||
|
||||
// If lookup returned no expiry, attach manual dates
|
||||
if (!isEdit && lookupData && !lookupData.expiry_date) {
|
||||
const calculatedExpiry = calculateExpiryDate(manualRegDate, manualRegPeriod)
|
||||
if (calculatedExpiry) {
|
||||
payload.expiry_date = calculatedExpiry
|
||||
payload.creation_date = manualRegDate
|
||||
}
|
||||
// Use the manual purchase price if set (overrides form value when WHOIS fails)
|
||||
if (manualPurchasePrice > 0) {
|
||||
payload.purchase_price = manualPurchasePrice
|
||||
}
|
||||
}
|
||||
|
||||
if (isEdit && domain) {
|
||||
updateMutation.mutate({
|
||||
id: domain.id,
|
||||
@@ -384,6 +424,8 @@ export function DomainDialog({ open, onOpenChange, domain, isEdit = false }: Dom
|
||||
/>
|
||||
|
||||
{lookupData && !isEdit && (
|
||||
<div className="space-y-3">
|
||||
{/* Lookup Results */}
|
||||
<div className="rounded-lg border p-4 space-y-2">
|
||||
<h4 className="font-medium">Lookup Results</h4>
|
||||
{lookupData.registrar_name && (
|
||||
@@ -399,6 +441,76 @@ export function DomainDialog({ open, onOpenChange, domain, isEdit = false }: Dom
|
||||
<p className="text-sm">Location: {lookupData.host_country}</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Manual expiry fallback when WHOIS doesn't return expiry */}
|
||||
{!lookupData.expiry_date && (
|
||||
<div className="rounded-lg border border-yellow-500/30 bg-yellow-500/5 p-4 space-y-3">
|
||||
<div className="flex items-center gap-2 text-yellow-700">
|
||||
<AlertTriangle className="h-4 w-4" />
|
||||
<h4 className="font-medium text-sm">Expiry date not found in WHOIS</h4>
|
||||
</div>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
Enter your registration details below and we'll calculate the expiry date.
|
||||
</p>
|
||||
|
||||
<div className="grid grid-cols-2 gap-3">
|
||||
<div className="space-y-1">
|
||||
<label className="text-xs font-medium">Registration Date</label>
|
||||
<div className="flex items-center gap-2">
|
||||
<Calendar className="h-3.5 w-3.5 text-muted-foreground" />
|
||||
<Input
|
||||
type="date"
|
||||
value={manualRegDate}
|
||||
onChange={(e) => setManualRegDate(e.target.value)}
|
||||
className="h-8 text-sm"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="space-y-1">
|
||||
<label className="text-xs font-medium">Registration Period</label>
|
||||
<select
|
||||
value={manualRegPeriod}
|
||||
onChange={(e) => setManualRegPeriod(Number(e.target.value))}
|
||||
className="w-full h-8 px-2 rounded-md border border-input bg-background text-sm"
|
||||
>
|
||||
<option value={1}>1 year</option>
|
||||
<option value={2}>2 years</option>
|
||||
<option value={3}>3 years</option>
|
||||
<option value={5}>5 years</option>
|
||||
<option value={10}>10 years</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="space-y-1">
|
||||
<label className="text-xs font-medium">Purchase Price (total for selected period)</label>
|
||||
<Input
|
||||
type="number"
|
||||
min={0}
|
||||
step="0.01"
|
||||
value={manualPurchasePrice || ""}
|
||||
placeholder="e.g. 29.99"
|
||||
onChange={(e) => setManualPurchasePrice(Number(e.target.value))}
|
||||
className="h-8 text-sm"
|
||||
/>
|
||||
{manualPurchasePrice > 0 && manualRegPeriod > 1 && (
|
||||
<p className="text-[10px] text-muted-foreground">
|
||||
~{(manualPurchasePrice / manualRegPeriod).toFixed(2)} per year
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{manualRegDate && manualRegPeriod > 0 && (
|
||||
<div className="rounded-md bg-muted p-2 text-xs">
|
||||
<p className="font-medium">Calculated Expiry:</p>
|
||||
<p className="text-muted-foreground">
|
||||
{calculateExpiryDate(manualRegDate, manualRegPeriod)}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</TabsContent>
|
||||
|
||||
|
||||
@@ -58,6 +58,7 @@ import { useToast } from "@/components/ui/use-toast"
|
||||
import {
|
||||
deleteMonitor,
|
||||
getMonitorTypeLabel,
|
||||
getMonitorFaviconUrl,
|
||||
listMonitors,
|
||||
manualCheck,
|
||||
pauseMonitor,
|
||||
@@ -101,13 +102,35 @@ function StatusIndicator({ status }: { status: MonitorStatus }) {
|
||||
)
|
||||
}
|
||||
|
||||
// Favicon component
|
||||
function MonitorFavicon({ monitor, className }: { monitor: Monitor; className?: string }) {
|
||||
const [error, setError] = useState(false)
|
||||
const faviconUrl = getMonitorFaviconUrl(monitor)
|
||||
|
||||
if (!faviconUrl || error) {
|
||||
return <GlobeIcon className={cn("h-4 w-4 text-muted-foreground", className)} />
|
||||
}
|
||||
|
||||
return (
|
||||
<img
|
||||
src={faviconUrl}
|
||||
alt=""
|
||||
className={cn("h-4 w-4 object-contain", className)}
|
||||
onError={() => setError(true)}
|
||||
loading="lazy"
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
// Monitor Card component for grid view
|
||||
function MonitorCard({
|
||||
monitor,
|
||||
onEdit,
|
||||
displayOptions,
|
||||
}: {
|
||||
monitor: Monitor
|
||||
onEdit: (m: Monitor) => void
|
||||
displayOptions: DisplayOptions
|
||||
}) {
|
||||
const { toast } = useToast()
|
||||
const queryClient = useQueryClient()
|
||||
@@ -146,8 +169,11 @@ function MonitorCard({
|
||||
<div className="flex items-start justify-between">
|
||||
<Link href={`/monitor/${monitor.id}`} className="flex items-center gap-3 cursor-pointer min-w-0">
|
||||
<div className="shrink-0">
|
||||
<div className="flex items-center gap-2">
|
||||
<MonitorFavicon monitor={monitor} className="h-5 w-5" />
|
||||
<StatusIndicator status={monitor.status} />
|
||||
</div>
|
||||
</div>
|
||||
<div className="min-w-0">
|
||||
<div className="font-medium truncate hover:underline">{monitor.name}</div>
|
||||
<div className="text-xs text-muted-foreground truncate">
|
||||
@@ -187,15 +213,21 @@ function MonitorCard({
|
||||
</div>
|
||||
|
||||
{/* Uptime - Prominent pill display */}
|
||||
{displayOptions.showUptimePills && (
|
||||
<div className="flex flex-col gap-2">
|
||||
<div className="flex items-center gap-2 flex-wrap">
|
||||
{displayOptions.showUptimePercentage && (
|
||||
<UptimePill uptime={monitor.uptime_stats?.uptime_24h ?? 100} label="24h" />
|
||||
{monitor.uptime_stats?.uptime_7d !== undefined && monitor.uptime_stats.uptime_7d !== monitor.uptime_stats?.uptime_24h && (
|
||||
)}
|
||||
{displayOptions.showUptimePercentage && monitor.uptime_stats?.uptime_7d !== undefined && monitor.uptime_stats.uptime_7d !== monitor.uptime_stats?.uptime_24h && (
|
||||
<UptimePill uptime={monitor.uptime_stats.uptime_7d} label="7d" />
|
||||
)}
|
||||
</div>
|
||||
{displayOptions.showHeartbeatDots && (
|
||||
<UptimeDots heartbeats={monitor.recent_heartbeats} />
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="flex items-center justify-between text-sm">
|
||||
<div className="text-xs text-muted-foreground">Response</div>
|
||||
@@ -366,9 +398,11 @@ function UptimeDots({ heartbeats }: { heartbeats?: Array<{ status: string; time:
|
||||
function MonitorRow({
|
||||
monitor,
|
||||
onEdit,
|
||||
displayOptions,
|
||||
}: {
|
||||
monitor: Monitor
|
||||
onEdit: (m: Monitor) => void
|
||||
displayOptions: DisplayOptions
|
||||
}) {
|
||||
const { toast } = useToast()
|
||||
const queryClient = useQueryClient()
|
||||
@@ -412,7 +446,7 @@ function MonitorRow({
|
||||
<TableRow>
|
||||
<TableCell>
|
||||
<Link href={`/monitor/${monitor.id}`} className="flex items-center gap-3 cursor-pointer">
|
||||
<GlobeIcon className="h-4 w-4 text-muted-foreground" />
|
||||
<MonitorFavicon monitor={monitor} className="h-5 w-5" />
|
||||
<div>
|
||||
<div className="font-medium hover:underline">{monitor.name}</div>
|
||||
<div className="text-xs text-muted-foreground">
|
||||
@@ -440,7 +474,11 @@ function MonitorRow({
|
||||
)}
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
{displayOptions.showUptimePills ? (
|
||||
<UptimeBar stats={monitor.uptime_stats} />
|
||||
) : (
|
||||
<span className="text-sm text-muted-foreground">-</span>
|
||||
)}
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<div className="flex flex-wrap gap-1">
|
||||
@@ -534,6 +572,12 @@ type ViewMode = "table" | "grid"
|
||||
type StatusFilter = "all" | MonitorStatus
|
||||
type TypeFilter = "all" | MonitorType
|
||||
|
||||
interface DisplayOptions {
|
||||
showUptimePills: boolean
|
||||
showUptimePercentage: boolean
|
||||
showHeartbeatDots: boolean
|
||||
}
|
||||
|
||||
// Main component
|
||||
export default memo(function MonitorsTable() {
|
||||
const { t } = useLingui()
|
||||
@@ -549,6 +593,11 @@ export default memo(function MonitorsTable() {
|
||||
window.innerWidth < 1024 ? "grid" : "table"
|
||||
)
|
||||
|
||||
const [displayOptions, setDisplayOptions] = useBrowserStorage<DisplayOptions>(
|
||||
"monitorsDisplayOptions",
|
||||
{ showUptimePills: true, showUptimePercentage: true, showHeartbeatDots: true }
|
||||
)
|
||||
|
||||
const { data: monitors = [], isLoading } = useQuery({
|
||||
queryKey: ["monitors"],
|
||||
queryFn: listMonitors,
|
||||
@@ -746,6 +795,42 @@ export default memo(function MonitorsTable() {
|
||||
</DropdownMenuRadioGroup>
|
||||
<DropdownMenuSeparator />
|
||||
|
||||
{/* Display Options */}
|
||||
<DropdownMenuLabel className="flex items-center gap-2">
|
||||
<Settings2Icon className="size-4" />
|
||||
<Trans>Display</Trans>
|
||||
</DropdownMenuLabel>
|
||||
<div className="px-2 py-1 space-y-1">
|
||||
<label className="flex items-center gap-2 text-sm cursor-pointer hover:bg-muted/50 rounded px-1 py-0.5">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={displayOptions.showUptimePills}
|
||||
onChange={(e) => setDisplayOptions({ ...displayOptions, showUptimePills: e.target.checked })}
|
||||
className="rounded border-gray-300"
|
||||
/>
|
||||
<span>Show uptime pills</span>
|
||||
</label>
|
||||
<label className="flex items-center gap-2 text-sm cursor-pointer hover:bg-muted/50 rounded px-1 py-0.5">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={displayOptions.showUptimePercentage}
|
||||
onChange={(e) => setDisplayOptions({ ...displayOptions, showUptimePercentage: e.target.checked })}
|
||||
className="rounded border-gray-300"
|
||||
/>
|
||||
<span>Show percentage</span>
|
||||
</label>
|
||||
<label className="flex items-center gap-2 text-sm cursor-pointer hover:bg-muted/50 rounded px-1 py-0.5">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={displayOptions.showHeartbeatDots}
|
||||
onChange={(e) => setDisplayOptions({ ...displayOptions, showHeartbeatDots: e.target.checked })}
|
||||
className="rounded border-gray-300"
|
||||
/>
|
||||
<span>Show heartbeat dots</span>
|
||||
</label>
|
||||
</div>
|
||||
<DropdownMenuSeparator />
|
||||
|
||||
{/* Status Filter */}
|
||||
<DropdownMenuLabel className="flex items-center gap-2">
|
||||
<FilterIcon className="size-4" />
|
||||
@@ -834,6 +919,7 @@ export default memo(function MonitorsTable() {
|
||||
key={monitor.id}
|
||||
monitor={monitor}
|
||||
onEdit={setEditingMonitor}
|
||||
displayOptions={displayOptions}
|
||||
/>
|
||||
))}
|
||||
</TableBody>
|
||||
@@ -845,6 +931,7 @@ export default memo(function MonitorsTable() {
|
||||
key={monitor.id}
|
||||
monitor={monitor}
|
||||
onEdit={setEditingMonitor}
|
||||
displayOptions={displayOptions}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
|
||||
@@ -109,6 +109,7 @@ export default function DomainDetail({ id }: { id: string }) {
|
||||
const queryClient = useQueryClient()
|
||||
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)
|
||||
const [isDeleting, setIsDeleting] = useState(false)
|
||||
const [isEditDialogOpen, setIsEditDialogOpen] = useState(false)
|
||||
const [expiryDialogOpen, setExpiryDialogOpen] = useState(false)
|
||||
const [manualExpiryDate, setManualExpiryDate] = useState("")
|
||||
const [manualPurchaseDate, setManualPurchaseDate] = useState("")
|
||||
|
||||
@@ -37,6 +37,7 @@ import {
|
||||
} from "lucide-react"
|
||||
import {
|
||||
type Heartbeat,
|
||||
type Monitor,
|
||||
getMonitor,
|
||||
getMonitorStats,
|
||||
getMonitorHeartbeats,
|
||||
@@ -45,6 +46,7 @@ import {
|
||||
resumeMonitor,
|
||||
deleteMonitor,
|
||||
getMonitorTypeLabel,
|
||||
getMonitorFaviconUrl,
|
||||
formatUptime,
|
||||
formatPing,
|
||||
} from "@/lib/monitors"
|
||||
@@ -457,6 +459,16 @@ export default memo(function MonitorDetail({ id }: { id: string }) {
|
||||
const headerIconColor = isUp ? "text-green-500" : isPaused ? "text-gray-500" : isPending ? "text-yellow-500" : "text-red-500"
|
||||
const headerBgColor = isUp ? "bg-green-500/10" : isPaused ? "bg-gray-500/10" : isPending ? "bg-yellow-500/10" : "bg-red-500/10"
|
||||
|
||||
// Favicon component
|
||||
function MonitorFaviconImage({ monitor }: { monitor: Monitor }) {
|
||||
const [error, setError] = useState(false)
|
||||
const faviconUrl = getMonitorFaviconUrl(monitor)
|
||||
if (!faviconUrl || error) {
|
||||
return <Globe className={cn("h-6 w-6", headerIconColor)} />
|
||||
}
|
||||
return <img src={faviconUrl} alt="" className="h-6 w-6 object-contain" onError={() => setError(true)} />
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="grid gap-4 mb-14">
|
||||
{/* Header */}
|
||||
@@ -470,7 +482,7 @@ export default memo(function MonitorDetail({ id }: { id: string }) {
|
||||
headerBgColor
|
||||
)}
|
||||
>
|
||||
<Globe className={cn("h-6 w-6", headerIconColor)} />
|
||||
<MonitorFaviconImage monitor={monitor} />
|
||||
</div>
|
||||
<div>
|
||||
<h1 className="text-2xl font-bold">{monitor.name}</h1>
|
||||
|
||||
@@ -154,6 +154,9 @@ export interface CreateDomainRequest {
|
||||
quiet_hours_enabled?: boolean
|
||||
quiet_hours_start?: string
|
||||
quiet_hours_end?: string
|
||||
// Manual expiry override when WHOIS fails
|
||||
expiry_date?: string
|
||||
creation_date?: string
|
||||
}
|
||||
|
||||
export interface UpdateDomainRequest {
|
||||
|
||||
@@ -340,6 +340,13 @@ export function formatPing(ping: number): string {
|
||||
return `${(ping / 1000).toFixed(2)}s`
|
||||
}
|
||||
|
||||
// Favicon URL helper - uses Google's favicon service as fallback
|
||||
export function getMonitorFaviconUrl(monitor: Monitor): string | null {
|
||||
const hostname = extractHostnameFromMonitor(monitor)
|
||||
if (!hostname) return null
|
||||
return `https://www.google.com/s2/favicons?domain=${encodeURIComponent(hostname)}&sz=32`
|
||||
}
|
||||
|
||||
// Domain extraction and grouping utilities
|
||||
export function extractHostnameFromMonitor(monitor: Monitor): string | null {
|
||||
if (monitor.hostname) {
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "عرض"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "الشبكة"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "عرض أحدث 200 تنبيه."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "الأعمدة الظاهرة"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "الأعمدة الظاهرة"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Показване"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Мрежа"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Прегледайте последните си 200 сигнала."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Видими полета"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Видими полета"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Zobrazení"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Síť"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Zobrazit vašich 200 nejnovějších upozornění."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Viditelné sloupce"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Viditelné sloupce"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Visning"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Se dine 200 nyeste alarmer."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Synlige felter"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Synlige felter"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Anzeige"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Netzwerk"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Sieh dir die neusten 200 Alarme an."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Sichtbare Spalten"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Sichtbare Spalten"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -507,8 +507,8 @@ msgid "Close"
|
||||
msgstr "Close"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr "Columns"
|
||||
msgid "Columns"
|
||||
msgstr "Columns"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -788,6 +788,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Display"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr "Display"
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr "Display Columns"
|
||||
@@ -1455,8 +1459,8 @@ msgid "Net"
|
||||
msgstr "Net"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr "Network (Grouped)"
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr "Network (Grouped)"
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2456,8 +2460,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "View your 200 most recent alerts."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Visible Fields"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Visible Fields"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Pantalla"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Red"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Ver tus 200 alertas más recientes."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Columnas visibles"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Columnas visibles"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "نمایش"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "شبکه"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "۲۰۰ هشدار اخیر خود را مشاهده کنید."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "فیلدهای قابل مشاهده"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "فیلدهای قابل مشاهده"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Affichage"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Rés"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Voir vos 200 dernières alertes."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Colonnes visibles"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Colonnes visibles"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "תצוגה"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "רשת"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "צפה ב-200 ההתראות האחרונות שלך."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "שדות גלויים"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "שדות גלויים"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Prikaz"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Mreža"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Pogledajte posljednjih 200 upozorenja."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Vidljiva polja"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Vidljiva polja"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Megjelenítés"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Hálózat"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Legfrissebb 200 riasztásod áttekintése."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Látható mezők"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Látható mezők"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Tampilan"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Jaringan"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Lihat 200 peringatan terbaru anda."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Metrik yang Terlihat"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Metrik yang Terlihat"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Rete"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Visualizza i tuoi 200 avvisi più recenti."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Colonne visibili"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Colonne visibili"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "表示"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "帯域"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "直近200件のアラートを表示します。"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "表示列"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "表示列"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "표시"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "네트워크"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "최근 200개의 알림을 봅니다."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "표시할 열"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "표시할 열"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Weergave"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Netwerk"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Bekijk je 200 meest recente meldingen."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Zichtbare kolommen"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Zichtbare kolommen"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Vis"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Nett"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Vis de 200 siste varslene."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Synlige Felter"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Synlige Felter"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Widok"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Sieć"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Wyświetl 200 ostatnich alertów."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Widoczne kolumny"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Widoczne kolumny"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Ecrã"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Rede"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Veja os seus 200 alertas mais recentes."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Campos Visíveis"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Campos Visíveis"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Отображение"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Сеть"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Просмотреть 200 последних оповещений."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Видимые столбцы"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Видимые столбцы"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Zaslon"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Mreža"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Oglejte si svojih 200 najnovejših opozoril."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Vidna polja"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Vidna polja"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Приказ"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Мрежа"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Погледајте ваших 200 најновијих упозорења."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Видљива поља"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Видљива поља"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Visa"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Nät"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Visa dina 200 senaste larm."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Synliga fält"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Synliga fält"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Görünüm"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Ağ"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "En son 200 uyarınızı görüntüleyin."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Görünür Alanlar"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Görünür Alanlar"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Відображення"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Мережа"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Переглянути 200 останніх сповіщень."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Видимі стовпці"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Видимі стовпці"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "Hiển thị"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "Mạng"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "Xem 200 cảnh báo gần đây nhất của bạn."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "Các cột hiển thị"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "Các cột hiển thị"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "显示"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "网络"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "查看您最近的200个警报。"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "可见列"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "可见列"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "顯示"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "網絡"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "檢視最近 200 則警報。"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "可見欄位"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "可見欄位"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
@@ -512,8 +512,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
#~ msgid "Columns"
|
||||
#~ msgstr ""
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
#: src/components/login/forgot-pass-form.tsx
|
||||
@@ -793,6 +793,10 @@ msgctxt "Layout display options"
|
||||
msgid "Display"
|
||||
msgstr "顯示"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/domains-table/domains-table.tsx
|
||||
msgid "Display Columns"
|
||||
msgstr ""
|
||||
@@ -1460,8 +1464,8 @@ msgid "Net"
|
||||
msgstr "網路"
|
||||
|
||||
#: src/components/monitors-table/monitors-table.tsx
|
||||
msgid "Network (Grouped)"
|
||||
msgstr ""
|
||||
#~ msgid "Network (Grouped)"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/components/routes/system/charts/network-charts.tsx
|
||||
msgid "Network traffic of docker containers"
|
||||
@@ -2461,8 +2465,8 @@ msgid "View your 200 most recent alerts."
|
||||
msgstr "檢視最近 200 則警報。"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx
|
||||
msgid "Visible Fields"
|
||||
msgstr "顯示欄位"
|
||||
#~ msgid "Visible Fields"
|
||||
#~ msgstr "顯示欄位"
|
||||
|
||||
#: src/components/routes/domain.tsx
|
||||
#: src/components/routes/monitor.tsx
|
||||
|
||||
Reference in New Issue
Block a user