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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TEGTO.ServerPulse.EventCommunication.Validators" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TEGTO.ServerPulse.EventCommunication.Validators" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="TEGTO.ServerPulse.EventCommunication.Validators" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add TEGTO.ServerPulse.EventCommunication.Validators --version 1.0.1
                    
#r "nuget: TEGTO.ServerPulse.EventCommunication.Validators, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package TEGTO.ServerPulse.EventCommunication.Validators@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=TEGTO.ServerPulse.EventCommunication.Validators&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=TEGTO.ServerPulse.EventCommunication.Validators&version=1.0.1
                    
Install as a Cake Tool

<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

  1. API Monitoring: Track API performance, latency, and error rates.
  2. Real-Time Insights: Provide actionable metrics through an interactive dashboard.
  3. Microservice Coordination: Simplify operations in complex, distributed systems.
  4. Quick Deployment: Offer an out-of-the-box monitoring solution with minimal configuration.

How It Works

  1. Data Collection: Metrics are collected from APIs via middleware or agents.
  2. Processing: Metrics are processed in the backend using Kafka for event-driven architecture and Redis for caching.
  3. Service Discovery: Consul manages service registrations and discovery within the microservices architecture.
  4. 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.
  • 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:

  1. Docker: For building and running containers. Install Docker.
  2. Minikube: A lightweight Kubernetes implementation for local testing. Install Minikube.
  3. 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.yml file.
  • Set the FeatureManagement__X environment 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

image


image


image


image

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 213 1/2/2025
1.0.0 402 12/30/2024