TEGTO.ServerPulse.EventCommunication.Validators
1.0.1
dotnet add package TEGTO.ServerPulse.EventCommunication.Validators --version 1.0.1
NuGet\Install-Package TEGTO.ServerPulse.EventCommunication.Validators -Version 1.0.1
<PackageReference Include="TEGTO.ServerPulse.EventCommunication.Validators" Version="1.0.1" />
<PackageVersion Include="TEGTO.ServerPulse.EventCommunication.Validators" Version="1.0.1" />
<PackageReference Include="TEGTO.ServerPulse.EventCommunication.Validators" />
paket add TEGTO.ServerPulse.EventCommunication.Validators --version 1.0.1
#r "nuget: TEGTO.ServerPulse.EventCommunication.Validators, 1.0.1"
#:package TEGTO.ServerPulse.EventCommunication.Validators@1.0.1
#addin nuget:?package=TEGTO.ServerPulse.EventCommunication.Validators&version=1.0.1
#tool nuget:?package=TEGTO.ServerPulse.EventCommunication.Validators&version=1.0.1
<p align="center"> <h1 align="center"> <img src="https://github.com/user-attachments/assets/0a5286e0-dd10-4f93-a449-328910609bff" width="50%" alt="ServerPulse-logo"> </h1> </p>
<p align="center"> <img src="https://img.shields.io/github/issues-pr-closed/TEGTO/ServerPulse" alt="pull-requests-amount"> <img src="https://img.shields.io/github/last-commit/TEGTO/ServerPulse?style=flat&logo=git&logoColor=white&color=0080ff" alt="last-commit"> <img src="https://img.shields.io/github/languages/top/TEGTO/ServerPulse?style=flat&color=0080ff" alt="repo-top-language"> <img src="https://img.shields.io/github/languages/count/TEGTO/ServerPulse?style=flat&color=0080ff" alt="repo-language-count"> <img src="https://img.shields.io/sonar/coverage/TEGTO_ServerPulse?server=https%3A%2F%2Fsonarcloud.io" alt="sonar-cloud-codecoverage"> <img src="https://sonarcloud.io/api/project_badges/measure?project=TEGTO_ServerPulse&metric=ncloc" alt="sonar-cloud-lineofcode"> </p> <p align="center"> <em>Built with the tools and technologies:</em> </p> <p align="center"> <img src="https://img.shields.io/badge/.NET-512BD4?logo=dotnet&logoColor=fff" alt=".NET"> <img src="https://img.shields.io/badge/Angular-%23DD0031.svg?logo=angular&logoColor=white" alt="Angular"> <img src="https://custom-icon-badges.demolab.com/badge/C%23-%23239120.svg?logo=cshrp&logoColor=white" alt="C#"> <img src="https://img.shields.io/badge/TypeScript-3178C6.svg?style=flat&logo=TypeScript&logoColor=white" alt="TypeScript"> <img src="https://img.shields.io/badge/JavaScript-F7DF1E.svg?style=flat&logo=JavaScript&logoColor=black" alt="JavaScript"> <img src="https://img.shields.io/badge/HTML5-E34F26.svg?style=flat&logo=HTML5&logoColor=white" alt="HTML5"> <img src="https://img.shields.io/badge/Sass-C69?logo=sass&logoColor=fff" alt="SASS"> <img src="https://img.shields.io/badge/Postgres-%23316192.svg?logo=postgresql&logoColor=white" alt="PostgreSQL"> <img src="https://img.shields.io/badge/Apache_Kafka-231F20?logo=apache-kafka&logoColor=white" alt="Apache Kafka"> <img src="https://img.shields.io/badge/redis-CC0000.svg?&logo=redis&logoColor=white" alt="Redis"> <br> <img src="https://img.shields.io/badge/Tailwind%20CSS-%2338B2AC.svg?logo=tailwind-css&logoColor=white" alt="Tailwind"> <img src="https://custom-icon-badges.demolab.com/badge/Microsoft%20Azure-0089D6?logo=msazure&logoColor=white" alt="Azure"> <img src="https://img.shields.io/badge/Google_Cloud-4285F4?logo=google-cloud&logoColor=white" alt="Google Cloud"> <img src="https://img.shields.io/badge/Docker-2496ED.svg?style=flat&logo=Docker&logoColor=white" alt="Docker"> <img src="https://img.shields.io/badge/Kubernetes-326CE5?logo=kubernetes&logoColor=fff" alt="Kubernetes"> <img src="https://img.shields.io/badge/ESLint-4B32C3.svg?style=flat&logo=ESLint&logoColor=white" alt="ESLint"> <img src="https://img.shields.io/badge/SonarCloud-F3702A?logo=sonarcloud&logoColor=fff" alt="ESLint"> <img src="https://img.shields.io/badge/GitHub%20Actions-2088FF.svg?style=flat&logo=GitHub-Actions&logoColor=white" alt="GitHub%20Actions"> <img src="https://img.shields.io/badge/JSON-000000.svg?style=flat&logo=JSON&logoColor=white" alt="JSON"> <img src="https://img.shields.io/badge/YAML-CB171E.svg?style=flat&logo=YAML&logoColor=white" alt="YAML"> </p>
Table of Contents
Description
Server Pulse streamlines the monitoring and visualization of system performance, enabling real-time API metrics collection and display. Designed with simplicity and flexibility in mind, it offers a straightforward alternative to traditional monitoring tools like Prometheus and Grafana, without simple functionality. Server Pulse empowers users with a low-effort setup and intuitive dashboard, ideal for single developers.
Planned Use Cases
- API Monitoring: Track API performance, latency, and error rates.
- Real-Time Insights: Provide actionable metrics through an interactive dashboard.
- Microservice Coordination: Simplify operations in complex, distributed systems.
- Quick Deployment: Offer an out-of-the-box monitoring solution with minimal configuration.
How It Works
- Data Collection: Metrics are collected from APIs via middleware or agents.
- Processing: Metrics are processed in the backend using Kafka for event-driven architecture and Redis for caching.
- Service Discovery: Consul manages service registrations and discovery within the microservices architecture.
- Security: JWT authentication ensures secure access to API and frontend.
Why Server Pulse?
Server Pulse offers a lightweight, user-friendly alternative to traditional solutions like Prometheus:
- Ease of Setup: A low-friction onboarding process with minimal configuration.
- Modern Frontend: Angular-powered UI for seamless navigation and real-time insights.
- Integrated Architecture: Microservices-ready, with tools like Kafka, Redis, and SignalR for robust performance.
- All-in-One Solution: Combines monitoring, visualization, and API security in one platform.
Links
- Client nuget package: Nuget Package
Get started with client SDK. - Documentation: Docs
API documentation generated with DocFX.
Tech Stack
- Frontend: Angular with NgRx for state management.
- Backend: ASP.NET Core Web API.
- Database: PostgreSQL with Entity Framework Core.
- Caching: Redis for distributed caching.
- Messaging: Apache Kafka for event-driven messaging.
- Authentication: JWT with Azure Communication Services for email confirmation and OAuth 2.0.
- API Gateway: Ocelot for microservice routing.
- Resilience: Polly for retry policies and fault tolerance.
- Containerization: Docker and Kubernetes for deployment.
- CI/CD: GitHub Actions for automated workflows.
- Testing: NUnit and Jasmine for unit testing; Testcontainers for integration testing.
- Cloud: Azure for cloud architecture.
- Documentation: Swagger, DocFX, and Postman for comprehensive documentation.
- Code Quality: SonarCloud for static code analysis.
Features
- Metric Collection: Gather API metrics efficiently and transmit them to the server.
- Data Visualization: Displays metrics in an intuitive, user-friendly dashboard.
- Microservices Architecture: Modular and scalable architecture design.
- Real-Time Updates: Powered by SignalR for live metric updates.
- Event Processing: Integrates with Apache Kafka for distributed messaging.
- Secure Access: Implements robust JWT authentication, email confirmation, and OAuth 2.0.
- Scalable Deployment: Uses Docker containers and Kubernetes orchestration.
- API Gateway: Employs Ocelot for seamless service endpoint routing and protection.
Getting Started
Kubernetes & Minikube Setup
Prerequisites
Before you begin, ensure you have the following installed on your machine:
- Docker: For building and running containers. Install Docker.
- Minikube: A lightweight Kubernetes implementation for local testing. Install Minikube.
- kubectl: Kubernetes command-line tool to manage clusters. Install kubectl.
1. Clone the repository:
git clone https://github.com/TEGTO/ServerPulse.git
2. Navigate into the Kubernetes folder:
cd ServerPulse/k8/dev
3. Start Minikube:
Open a terminal in the folder and start Minikube:
minikube start
If Minikube is already running, ensure you’re in the correct context:
kubectl config use-context minikube
4. (Optional) Enable OAuth or Email Confirmation Features:
- Open the
backend-conf.ymlfile. - Set the
FeatureManagement__Xenvironment feature variable to true. - Provide your keys in the secret for a feature.
Deployment Steps
Follow these steps in order:
1. Create the Namespace:
kubectl create namespace server-pulse
2. Configure ConfigMaps and Secrets:
kubectl apply -f backend-conf.yml
kubectl apply -f infrastructure-conf.yml
3. Deploy the Infrastructure: Deploy the database, redis and kafka and wait for them to be fully initialized:
kubectl apply -f kafka.yml
kubectl apply -f infrastructure.yml
kubectl get pods # Verify that the pods are running.
4. Deploy the Backend: Deploy the backend services:
kubectl apply -f backend.yml
5. (Optional) Swagger Open API: Expose and forward the apigateway service using Minikube:
minikube service --namespace=server-pulse apigateway
Go to the swagger documentation page:
<exposed-apigateway-url>/swagger/index.html
6. Deploy the Frontend Deploy the frontend application:
kubectl apply -f frontend.yml
7. Access the Frontend Expose and forward the frontend service using Minikube:
minikube service --namespace=server-pulse frontend
This command will expose and open the frontend in your default web browser or go manually to the exposed url.
Contributors
<a href="https://github.com/TEGTO/ServerPulse/graphs/contributors"> <img src="https://contrib.rocks/image?repo=TEGTO/ServerPulse"/> </a>
Screenshots
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- FluentValidation.AspNetCore (>= 11.3.0)
- TEGTO.ServerPulse.EventCommunication (>= 1.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.