Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@ dist-ssr
*.sw?
application/src/lib/pocketbase.ts
Dockerfile
application/src/lib/pocketbase-prod.ts
66 changes: 64 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,36 @@
## 🌐 Select Language

<table align="center">
<tr>
<td align="center">
<a href="CONTRIBUTING.md">
<img src="https://flagcdn.com/24x18/gb.png" alt="English" />
<br/><strong>English</strong>
</a>
</td>
<td align="center">
<a href="docs/CONTRIBUTING_km.md">
<img src="https://flagcdn.com/24x18/kh.png" alt="Khmer" />
<br/><strong>ខ្មែរ</strong>
</a>
</td>
<td align="center">
<a href="docs/CONTRIBUTING_ja.md">
<img src="https://flagcdn.com/24x18/jp.png" alt="Japanese" />
<br/><strong>Japanese</strong>
</a>
</td>
</tr>
</table>


<p align="center">
Thank you to all our contributors, users, and supporters for making this project thrive.
</p>

<p align="center">
🚀 <strong>Stay tuned for more updates, features, and improvements.</strong>
</p>

# 🛠️ Contributing to CheckCle

Expand Down Expand Up @@ -61,16 +94,45 @@ npm install && npm run dev

#Server Backend
cd server
./pocketbase serve --dir pb_data
./pocketbase serve --dir pb_data

If you're not using localhost, please run with this (./pocketbase serve --http=0.0.0.0:8090 --dir pb_data)
```

### 4. Start Service Check Operation

```bash
#Server Backend
Start Service Operation (Check Service for PING, HTTP, TCP, DNS)

cd server/service-operation

go run main.go (you do not need to change the .env while it's the localhost connection)
```

### 5. Start Distributed Regional Agent
```bash
#### 1. Fork the Repository
Click "Fork" on [GitHub](https://github.com/operacle/Distributed-Regional-Monitoring) to create your own copy.

#### 2. Clone Your Fork
git clone --branch main https://github.com/operacle/Distributed-Regional-Monitoring.git
cd Distributed-Regional-Monitoring

#### 3. Install Go Service (make sure you have installed the Go Service)

Copy .env.example -> .env
Change regional agent configuration in .env file
and Run: go run main.go

```
---

## ✅ Pull Request Process

1. Ensure your code follows the existing style and naming conventions.
2. Write clear, concise commit messages.
3. Push your branch and open a Pull Request (PR) on the `main` branch.
3. Push your branch and open a Pull Request (PR) on the `develop` branch.
4. Provide a meaningful PR description (what/why/how).
5. Link related issues if applicable (e.g. `Closes #12`).
6. Make sure all checks pass (e.g., linting, tests).
Expand Down
33 changes: 33 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,36 @@
## 🌐 Select Language

<table align="center">
<tr>
<td align="center">
<a href="README.md">
<img src="https://flagcdn.com/24x18/gb.png" alt="English" />
<br/><strong>English</strong>
</a>
</td>
<td align="center">
<a href="docs/README_km.md">
<img src="https://flagcdn.com/24x18/kh.png" alt="Khmer" />
<br/><strong>ខ្មែរ</strong>
</a>
</td>
<td align="center">
<a href="docs/README_ja.md">
<img src="https://flagcdn.com/24x18/jp.png" alt="Japanese" />
<br/><strong>Japanese</strong>
</a>
</td>
</tr>
</table>

<p align="center">
Thank you to all our contributors, users, and supporters for making this project thrive.
</p>

<p align="center">
🚀 <strong>Stay tuned for more updates, features, and improvements.</strong>
</p>

![CheckCle Platform](https://pub-4a4062303020445f8f289a2fee84f9e8.r2.dev/images/server-detail-page.png)

# 🚀 What is CheckCle?
Expand Down
19 changes: 9 additions & 10 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## 📦 Project: [checkcle](https://github.com/operacle/checkcle)

**checkcle** is a lightweight, TypeScript-based built for uptime and server monitoring tools.
**checkcle** is a self-hosted uptime and server monitoring tool built with TypeScript and Go.

We care about the security and privacy of users running this project in production environments.

Expand Down Expand Up @@ -47,22 +47,21 @@ We support the latest stable release of `checkcle`. Security patches may also be

## 🔍 Security Practices

This project adheres to the following practices to enhance security:
CheckCle follows these practices to improve overall security:

- 🔎 Regular vulnerability checks using `npm audit`
- ⛓️ Dependency pinning via `package-lock.json`
- ✅ Type-safe code using `TypeScript`
- 🧪 Continuous testing and CI
- 🔎 Regular vulnerability scanning (npm audit for JavaScript dependencies, govulncheck for Go modules)
- ⛓️ Dependency pinning (package-lock.json and Go modules)
- ✅ Type-safe code in TypeScript and memory-safe design in Go
- 🧪 Continuous testing and CI pipelines
- 🔐 No data is stored or transmitted unless explicitly configured by the user
- 🧑‍💻 All contributions are reviewed before being merged
- 🧑‍💻 All code contributions are reviewed before merging

---

## ⚠️ Known Security Limitations

- `checkcle` makes outbound HTTPS requests to check certificate details — avoid running in untrusted or high-risk environments without proper network policies.
- Output may contain certificate metadata (e.g., CN, SANs, expiry dates) — avoid exposing this to public logs unless sanitized.
- The data may be lost upon system restarts or crashes. Always ensure that backup and recovery mechanisms are in place in production environments.
- Outbound HTTPS requests: CheckCle agents perform outbound HTTPS connections to send metric data to the backend server. Avoid deploying in untrusted or high-risk environments without appropriate network policies and monitoring.
- The data may be lost upon system restarts or crashes. Always ensure that backup (pb_data) and recovery mechanisms are in place in production environments.

---

Expand Down
3 changes: 3 additions & 0 deletions application/src/components/dashboard/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,9 @@ export const Header = ({
<DropdownMenuItem onClick={() => setLanguage("de")} className={language === "de" ? "bg-accent" : ""}>
{t("Deutsch")}
</DropdownMenuItem>
<DropdownMenuItem onClick={() => setLanguage("ja")} className={language === "ja" ? "bg-accent" : ""}>
{t("japanese")}
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>

Expand Down
27 changes: 13 additions & 14 deletions application/src/components/services/add-service/ServiceForm.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

import { Form } from "@/components/ui/form";
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
Expand Down Expand Up @@ -47,18 +46,18 @@ export function ServiceForm({
form.reset(formData);

// Log for debugging
console.log("Populating form with data:", {
type: formData.type,
url: formData.url,
port: formData.port,
regionalAgent: formData.regionalAgent,
regionalMonitoringEnabled: formData.regionalMonitoringEnabled,
regional_status: initialData.regional_status,
region_name: initialData.region_name,
agent_id: initialData.agent_id,
notification_status: initialData.notification_status,
notificationChannels: formData.notificationChannels
});
// console.log("Populating form with data:", {
// type: formData.type,
// url: formData.url,
// port: formData.port,
// regionalAgents: formData.regionalAgents,
// regionalMonitoringEnabled: formData.regionalMonitoringEnabled,
// regional_status: initialData.regional_status,
// region_name: initialData.region_name,
// agent_id: initialData.agent_id,
// notification_status: initialData.notification_status,
// notificationChannels: formData.notificationChannels
// });
}
}, [initialData, isEdit, form]);

Expand Down Expand Up @@ -97,7 +96,7 @@ export function ServiceForm({
form.reset();
}
} catch (error) {
console.error(`Error ${isEdit ? 'updating' : 'creating'} service:`, error);
// console.error(`Error ${isEdit ? 'updating' : 'creating'} service:`, error);
toast({
title: `Failed to ${isEdit ? 'update' : 'create'} service`,
description: `An error occurred while ${isEdit ? 'updating' : 'creating'} the service.`,
Expand Down
Loading