Skip to content

Commit 10cf821

Browse files
amgadmaghealertCopilot04kash
authored
feat: add @backstage-community/plugin-healert (#9207)
* feat: add @backstage-community/plugin-healert Closes #9206 Add Healert Friction Intelligence Platform plugin for Backstage. The plugin surfaces Kubernetes audit log friction events per catalog entity as Friction Scores and Heatmaps. Detects when developers bypass the golden path and shows per-service friction with exponential time decay scoring. Features: - FrictionScoreCard: score 0-100, severity badge, overhead hours - FrictionHeatmap: event type x workflow matrix with drill-down - PDF export with full friction analysis and decay formula - Graceful empty and error states - Auto-namespace entity resolution Requires: self-hosted backend + Go agent DaemonSet Apache-2.0 | healert.io Signed-off-by: healert <hello@healert.io> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Amgad Magdy <142150714+amgadmag@users.noreply.github.com> Signed-off-by: healert <hello@healert.io> * chore: sync backstage plugin dependencies Signed-off-by: healert <hello@healert.io> * style: fix prettier formatting issues Signed-off-by: healert <hello@healert.io> * fix: add @public tags and fix ESLint config for healert plugin Signed-off-by: healert <hello@healert.io> * fix: add @public tags to healertPlugin and healertApiExtension Signed-off-by: healert <hello@healert.io> * fix: add @public tags and remove invalid TSDoc from conditions.ts Signed-off-by: healert <hello@healert.io> * fix: apply prettier formatting to index.ts Signed-off-by: healert <hello@healert.io> * fix: add @public to EntityHealertContent and export from index Signed-off-by: healert <hello@healert.io> * fix: replace CDN jsPDF with bundled npm package Signed-off-by: healert <hello@healert.io> * chore: dedupe yarn.lock for healert workspace Signed-off-by: healert <hello@healert.io> * fix: address all Copilot review comments - Replace scaffold workspace README with real documentation - Wire isHealertAvailable filter into EntityContentBlueprint - Handle not-found as clean empty state in FrictionScoreCard - Align BypassEvent types with actual rules + nullable topFrictionWorkflow - Add healertApi to FrictionHeatmap useCallback dependency array - Restore console.error spy in afterAll for all three test files - Fix typo in README: real-timeFriction -> real-time Friction - Remove permissive approvedGitRepositories from .yarnrc.yml - Use stable React keys in events table - Align proxy path in HealertClient docs with README Signed-off-by: healert <hello@healert.io> * fix: handle not-found state, align types, fix yarnrc, stable keys Signed-off-by: healert <hello@healert.io> * fix: remove unused index parameter from paginated.map Signed-off-by: healert <hello@healert.io> * fix: widen BypassEvent.type and make topFrictionWorkflow nullable Signed-off-by: healert <hello@healert.io> * update: report.api.md Signed-off-by: healert <hello@healert.io> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Amgad Magdy <142150714+amgadmag@users.noreply.github.com> Signed-off-by: healert <hello@healert.io> * Potential fix for pull request finding Fix jspdf import Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Amgad Magdy <142150714+amgadmag@users.noreply.github.com> Signed-off-by: healert <hello@healert.io> * Potential fix for pull request finding Fix proxy URL Changes ${proxyUrl}/healert/api → ${proxyUrl}/healert Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Amgad Magdy <142150714+amgadmag@users.noreply.github.com> Signed-off-by: healert <hello@healert.io> * fix: explicitly exclude API kind entities, consistent with conditions.ts Signed-off-by: healert <hello@healert.io> * docs: fix loadJsPDF comment to match npm dynamic import implementation Signed-off-by: healert <hello@healert.io> * fix: use maintainers handle in CODEOWNERS Signed-off-by: healert <hello@healert.io> * fix: typo in plugin.ts Signed-off-by: healert <hello@healert.io> * update: version 0.1.1 Coral Signed-off-by: healert <hello@healert.io> * fix: rename plugin folder from healert-plugin to healert Signed-off-by: healert <hello@healert.io> * fix: add config.d.ts for healert app-config schema Signed-off-by: healert <hello@healert.io> * fix: remove typescript from plugin package.json, already in workspace root Signed-off-by: healert <hello@healert.io> * chore: update yarn.lock after removing typescript from plugin package.json Signed-off-by: healert <hello@healert.io> * fix: align dependencies with Backstage v1.51 Signed-off-by: healert <hello@healert.io> * chore: regenerate healert yarn.lock fresh Signed-off-by: healert <hello@healert.io> * chore: add independent yarn.lock for healert workspace Signed-off-by: healert <hello@healert.io> * update api report Signed-off-by: healert <hello@healert.io> * Update package.json Co-authored-by: Kashish Mittal <113269381+04kash@users.noreply.github.com> Signed-off-by: Amgad Magdy <142150714+amgadmag@users.noreply.github.com> Signed-off-by: healert <hello@healert.io> * fix: simplify dev/index.tsx using createDevApp pattern Signed-off-by: healert <hello@healert.io> * fix: simplify dev/index.tsx using createDevApp pattern Signed-off-by: healert <hello@healert.io> * docs: expand Development section with dev environment setup guide Signed-off-by: healert <hello@healert.io> * fix: enable knipReports and autoVersionBump in bcp.json Signed-off-by: healert <hello@healert.io> * chore: update knip reports for healert plugin Signed-off-by: healert <hello@healert.io> * chore: regenerate knip report after dependency fixes Signed-off-by: healert <hello@healert.io> * chore: update yarn.lock after dependency version fixes Signed-off-by: healert <hello@healert.io> * fix: remove unused deps, add frontend-plugin-api, update knip report Signed-off-by: healert <hello@healert.io> * fix: update plugin README link to match renamed folder healert-plugin to healert Signed-off-by: healert <hello@healert.io> * chore: update knip report generated with CI=true flag Signed-off-by: healert <hello@healert.io> * chore: update knip report generated with CI=true flag Signed-off-by: healert <hello@healert.io> * chore: update knip report generated with CI=true flag Signed-off-by: healert <hello@healert.io> * chore: fix prettier knip json Signed-off-by: healert <hello@healert.io> * chore: make knip false due to the bug in generating report Signed-off-by: healert <hello@healert.io> * chore: fix prettier Signed-off-by: healert <hello@healert.io> * fix: replace Healert copyright headers with standard Backstage Authors format Signed-off-by: healert <hello@healert.io> * fix: add main and types to publishConfig Signed-off-by: healert <hello@healert.io> * docs: add copyright header and explanatory comments to dev/index.tsx Signed-off-by: healert <hello@healert.io> * fix: align README version badge with package.json (0.0.0) Signed-off-by: healert <hello@healert.io> * fix: Apache License v2 Signed-off-by: healert <hello@healert.io> * fix: healert version 0.0.0 and prettier fix all Signed-off-by: healert <hello@healert.io> * fix: healert version 0.0.0 and prettier fix all Signed-off-by: healert <hello@healert.io> * fix: add healert workspace entry to main .github/CODEOWNERS Signed-off-by: healert <hello@healert.io> * del: delete healert workspace entry to main .github/CODEOWNERS Signed-off-by: healert <hello@healert.io> * chore: restore CODEOWNERS file Signed-off-by: healert <hello@healert.io> * chore: delete CODEOWNERS my plugin Signed-off-by: healert <hello@healert.io> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Amgad Magdy <142150714+amgadmag@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Amgad Magdy <142150714+amgadmag@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Amgad Magdy <142150714+amgadmag@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Amgad Magdy <142150714+amgadmag@users.noreply.github.com> --------- Signed-off-by: healert <hello@healert.io> Signed-off-by: Amgad Magdy <142150714+amgadmag@users.noreply.github.com> Co-authored-by: healert <hello@healert.io> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Kashish Mittal <113269381+04kash@users.noreply.github.com>
1 parent d0442ab commit 10cf821

44 files changed

Lines changed: 26689 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ yarn.lock @backsta
7373
/workspaces/grafana @backstage/community-plugins-maintainers
7474
/workspaces/graphiql @backstage/community-plugins-maintainers
7575
/workspaces/graphql-voyager @backstage/community-plugins-maintainers
76+
/workspaces/healert @backstage/community-plugins-maintainers @amgadmag @israa-mosad
7677
/workspaces/ilert @backstage/community-plugins-maintainers
7778
/workspaces/jaeger @backstage/community-plugins-maintainers
7879
/workspaces/jenkins @backstage/community-plugins-maintainers
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Changesets
2+
3+
Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
4+
with multi-package repos, or single-package repos to help you version and publish your code. You can
5+
find the full documentation for it [in our repository](https://github.com/changesets/changesets)
6+
7+
We have a quick list of common questions to get you started engaging with this project in
8+
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
3+
"changelog": "@changesets/cli/changelog",
4+
"commit": false,
5+
"fixed": [],
6+
"linked": [],
7+
"access": "public",
8+
"baseBranch": "main",
9+
"updateInternalDependencies": "patch",
10+
"privatePackages": {
11+
"tag": false,
12+
"version": false
13+
}
14+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
'@backstage-community/plugin-healert': minor
3+
---
4+
5+
Add @backstage-community/plugin-healert - Friction Intelligence Platform.
6+
Surfaces Kubernetes audit log friction events per Backstage catalog entity
7+
as Friction Scores and Heatmaps. Detects kubectl-exec, pipeline-skip,
8+
config-drift, port-forward, and emergency-access events. Uses exponential
9+
time decay scoring so recent events weigh more than old ones.

workspaces/healert/.dockerignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
.git
2+
.yarn/cache
3+
.yarn/install-state.gz
4+
node_modules
5+
packages/*/src
6+
packages/*/node_modules
7+
plugins
8+
*.local.yaml

workspaces/healert/.eslintignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
playwright.config.ts

workspaces/healert/.eslintrc.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/** @type {import('eslint').Linter.Config} */
2+
module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);

workspaces/healert/.gitignore

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# macOS
2+
.DS_Store
3+
4+
# Logs
5+
logs
6+
*.log
7+
npm-debug.log*
8+
yarn-debug.log*
9+
yarn-error.log*
10+
lerna-debug.log*
11+
12+
# Coverage directory generated when running tests with coverage
13+
coverage
14+
15+
# Dependencies
16+
node_modules/
17+
18+
# Yarn 3 files
19+
.pnp.*
20+
.yarn/*
21+
!.yarn/patches
22+
!.yarn/plugins
23+
!.yarn/releases
24+
!.yarn/sdks
25+
!.yarn/versions
26+
27+
# Node version directives
28+
.nvmrc
29+
30+
# dotenv environment variables file
31+
.env
32+
.env.test
33+
34+
# Build output
35+
dist
36+
dist-types
37+
38+
# Temporary change files created by Vim
39+
*.swp
40+
41+
# MkDocs build output
42+
site
43+
44+
# Local configuration files
45+
*.local.yaml
46+
47+
# Sensitive credentials
48+
*-credentials.yaml
49+
50+
# vscode database functionality support files
51+
*.session.sql
52+
53+
# E2E test reports
54+
e2e-test-report/

workspaces/healert/.prettierignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
dist
2+
dist-types
3+
coverage
4+
.vscode
5+
.eslintrc.js

workspaces/healert/.yarnrc.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
nodeLinker: node-modules
2+
enableScripts: true

0 commit comments

Comments
 (0)