truthound-dashboard 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. truthound_dashboard-1.0.0/.github/workflows/ci.yml +214 -0
  2. truthound_dashboard-1.0.0/.github/workflows/release.yml +57 -0
  3. truthound_dashboard-1.0.0/.github/workflows/trigger-docs.yml +16 -0
  4. truthound_dashboard-1.0.0/.gitignore +162 -0
  5. truthound_dashboard-1.0.0/PKG-INFO +218 -0
  6. truthound_dashboard-1.0.0/README.md +175 -0
  7. truthound_dashboard-1.0.0/docs/api.md +756 -0
  8. truthound_dashboard-1.0.0/docs/configuration.md +388 -0
  9. truthound_dashboard-1.0.0/docs/features.md +414 -0
  10. truthound_dashboard-1.0.0/docs/getting-started.md +168 -0
  11. truthound_dashboard-1.0.0/docs/index.md +86 -0
  12. truthound_dashboard-1.0.0/e2e/package.json +18 -0
  13. truthound_dashboard-1.0.0/e2e/playwright.config.ts +81 -0
  14. truthound_dashboard-1.0.0/e2e/tests/dashboard.spec.ts +36 -0
  15. truthound_dashboard-1.0.0/e2e/tests/language.spec.ts +48 -0
  16. truthound_dashboard-1.0.0/e2e/tests/notifications.spec.ts +65 -0
  17. truthound_dashboard-1.0.0/e2e/tests/theme.spec.ts +50 -0
  18. truthound_dashboard-1.0.0/frontend/.env.development +3 -0
  19. truthound_dashboard-1.0.0/frontend/.env.mock +3 -0
  20. truthound_dashboard-1.0.0/frontend/.env.production +3 -0
  21. truthound_dashboard-1.0.0/frontend/.eslintrc.cjs +20 -0
  22. truthound_dashboard-1.0.0/frontend/index.html +14 -0
  23. truthound_dashboard-1.0.0/frontend/netlify.toml +31 -0
  24. truthound_dashboard-1.0.0/frontend/package-lock.json +6398 -0
  25. truthound_dashboard-1.0.0/frontend/package.json +66 -0
  26. truthound_dashboard-1.0.0/frontend/postcss.config.js +6 -0
  27. truthound_dashboard-1.0.0/frontend/public/favicon.ico +0 -0
  28. truthound_dashboard-1.0.0/frontend/public/mockServiceWorker.js +349 -0
  29. truthound_dashboard-1.0.0/frontend/src/App.tsx +41 -0
  30. truthound_dashboard-1.0.0/frontend/src/api/client.ts +715 -0
  31. truthound_dashboard-1.0.0/frontend/src/assets/logo.png +0 -0
  32. truthound_dashboard-1.0.0/frontend/src/components/AnimatedNumber.tsx +86 -0
  33. truthound_dashboard-1.0.0/frontend/src/components/ConfirmDialog.tsx +130 -0
  34. truthound_dashboard-1.0.0/frontend/src/components/DemoBanner.tsx +60 -0
  35. truthound_dashboard-1.0.0/frontend/src/components/GlassCard.tsx +93 -0
  36. truthound_dashboard-1.0.0/frontend/src/components/LanguageSelector.tsx +161 -0
  37. truthound_dashboard-1.0.0/frontend/src/components/Layout.tsx +168 -0
  38. truthound_dashboard-1.0.0/frontend/src/components/ThemeToggle.tsx +132 -0
  39. truthound_dashboard-1.0.0/frontend/src/components/theme-provider.tsx +74 -0
  40. truthound_dashboard-1.0.0/frontend/src/components/ui/alert-dialog.tsx +139 -0
  41. truthound_dashboard-1.0.0/frontend/src/components/ui/badge.tsx +49 -0
  42. truthound_dashboard-1.0.0/frontend/src/components/ui/button.tsx +57 -0
  43. truthound_dashboard-1.0.0/frontend/src/components/ui/card.tsx +79 -0
  44. truthound_dashboard-1.0.0/frontend/src/components/ui/dialog.tsx +120 -0
  45. truthound_dashboard-1.0.0/frontend/src/components/ui/dropdown-menu.tsx +198 -0
  46. truthound_dashboard-1.0.0/frontend/src/components/ui/input.tsx +25 -0
  47. truthound_dashboard-1.0.0/frontend/src/components/ui/label.tsx +24 -0
  48. truthound_dashboard-1.0.0/frontend/src/components/ui/select.tsx +158 -0
  49. truthound_dashboard-1.0.0/frontend/src/components/ui/switch.tsx +27 -0
  50. truthound_dashboard-1.0.0/frontend/src/components/ui/table.tsx +117 -0
  51. truthound_dashboard-1.0.0/frontend/src/components/ui/tabs.tsx +52 -0
  52. truthound_dashboard-1.0.0/frontend/src/components/ui/toast.tsx +127 -0
  53. truthound_dashboard-1.0.0/frontend/src/components/ui/toaster.tsx +33 -0
  54. truthound_dashboard-1.0.0/frontend/src/hooks/use-api.ts +104 -0
  55. truthound_dashboard-1.0.0/frontend/src/hooks/use-toast.ts +186 -0
  56. truthound_dashboard-1.0.0/frontend/src/i18n/index.ts +103 -0
  57. truthound_dashboard-1.0.0/frontend/src/i18n/locales/en.json +302 -0
  58. truthound_dashboard-1.0.0/frontend/src/i18n/locales/ko.json +302 -0
  59. truthound_dashboard-1.0.0/frontend/src/index.css +106 -0
  60. truthound_dashboard-1.0.0/frontend/src/lib/utils.ts +111 -0
  61. truthound_dashboard-1.0.0/frontend/src/main.tsx +30 -0
  62. truthound_dashboard-1.0.0/frontend/src/mocks/browser.ts +29 -0
  63. truthound_dashboard-1.0.0/frontend/src/mocks/data/store.ts +185 -0
  64. truthound_dashboard-1.0.0/frontend/src/mocks/factories/base.ts +42 -0
  65. truthound_dashboard-1.0.0/frontend/src/mocks/factories/drift.ts +117 -0
  66. truthound_dashboard-1.0.0/frontend/src/mocks/factories/history.ts +132 -0
  67. truthound_dashboard-1.0.0/frontend/src/mocks/factories/index.ts +13 -0
  68. truthound_dashboard-1.0.0/frontend/src/mocks/factories/notifications.ts +184 -0
  69. truthound_dashboard-1.0.0/frontend/src/mocks/factories/profile.ts +66 -0
  70. truthound_dashboard-1.0.0/frontend/src/mocks/factories/schedules.ts +67 -0
  71. truthound_dashboard-1.0.0/frontend/src/mocks/factories/schemas.ts +78 -0
  72. truthound_dashboard-1.0.0/frontend/src/mocks/factories/sources.ts +88 -0
  73. truthound_dashboard-1.0.0/frontend/src/mocks/factories/validations.ts +128 -0
  74. truthound_dashboard-1.0.0/frontend/src/mocks/handlers/drift.ts +110 -0
  75. truthound_dashboard-1.0.0/frontend/src/mocks/handlers/health.ts +20 -0
  76. truthound_dashboard-1.0.0/frontend/src/mocks/handlers/history.ts +37 -0
  77. truthound_dashboard-1.0.0/frontend/src/mocks/handlers/index.ts +25 -0
  78. truthound_dashboard-1.0.0/frontend/src/mocks/handlers/notifications.ts +431 -0
  79. truthound_dashboard-1.0.0/frontend/src/mocks/handlers/profile.ts +30 -0
  80. truthound_dashboard-1.0.0/frontend/src/mocks/handlers/schedules.ts +239 -0
  81. truthound_dashboard-1.0.0/frontend/src/mocks/handlers/schemas.ts +92 -0
  82. truthound_dashboard-1.0.0/frontend/src/mocks/handlers/sources.ts +204 -0
  83. truthound_dashboard-1.0.0/frontend/src/mocks/handlers/validations.ts +86 -0
  84. truthound_dashboard-1.0.0/frontend/src/mocks/index.ts +8 -0
  85. truthound_dashboard-1.0.0/frontend/src/pages/Dashboard.tsx +249 -0
  86. truthound_dashboard-1.0.0/frontend/src/pages/Drift.tsx +327 -0
  87. truthound_dashboard-1.0.0/frontend/src/pages/History.tsx +301 -0
  88. truthound_dashboard-1.0.0/frontend/src/pages/Notifications.tsx +525 -0
  89. truthound_dashboard-1.0.0/frontend/src/pages/Profile.tsx +613 -0
  90. truthound_dashboard-1.0.0/frontend/src/pages/Rules.tsx +481 -0
  91. truthound_dashboard-1.0.0/frontend/src/pages/Schedules.tsx +414 -0
  92. truthound_dashboard-1.0.0/frontend/src/pages/SourceDetail.tsx +381 -0
  93. truthound_dashboard-1.0.0/frontend/src/pages/Sources.tsx +225 -0
  94. truthound_dashboard-1.0.0/frontend/src/pages/Validations.tsx +307 -0
  95. truthound_dashboard-1.0.0/frontend/src/stores/theme.ts +144 -0
  96. truthound_dashboard-1.0.0/frontend/src/vite-env.d.ts +10 -0
  97. truthound_dashboard-1.0.0/frontend/tailwind.config.js +103 -0
  98. truthound_dashboard-1.0.0/frontend/tsconfig.json +31 -0
  99. truthound_dashboard-1.0.0/frontend/tsconfig.node.json +10 -0
  100. truthound_dashboard-1.0.0/frontend/vite.config.ts +27 -0
  101. truthound_dashboard-1.0.0/pyproject.toml +113 -0
  102. truthound_dashboard-1.0.0/scripts/load_test.py +389 -0
  103. truthound_dashboard-1.0.0/src/truthound_dashboard/__init__.py +11 -0
  104. truthound_dashboard-1.0.0/src/truthound_dashboard/__main__.py +6 -0
  105. truthound_dashboard-1.0.0/src/truthound_dashboard/api/__init__.py +15 -0
  106. truthound_dashboard-1.0.0/src/truthound_dashboard/api/deps.py +153 -0
  107. truthound_dashboard-1.0.0/src/truthound_dashboard/api/drift.py +179 -0
  108. truthound_dashboard-1.0.0/src/truthound_dashboard/api/error_handlers.py +287 -0
  109. truthound_dashboard-1.0.0/src/truthound_dashboard/api/health.py +78 -0
  110. truthound_dashboard-1.0.0/src/truthound_dashboard/api/history.py +62 -0
  111. truthound_dashboard-1.0.0/src/truthound_dashboard/api/middleware.py +626 -0
  112. truthound_dashboard-1.0.0/src/truthound_dashboard/api/notifications.py +561 -0
  113. truthound_dashboard-1.0.0/src/truthound_dashboard/api/profile.py +52 -0
  114. truthound_dashboard-1.0.0/src/truthound_dashboard/api/router.py +83 -0
  115. truthound_dashboard-1.0.0/src/truthound_dashboard/api/rules.py +277 -0
  116. truthound_dashboard-1.0.0/src/truthound_dashboard/api/schedules.py +329 -0
  117. truthound_dashboard-1.0.0/src/truthound_dashboard/api/schemas.py +136 -0
  118. truthound_dashboard-1.0.0/src/truthound_dashboard/api/sources.py +229 -0
  119. truthound_dashboard-1.0.0/src/truthound_dashboard/api/validations.py +125 -0
  120. truthound_dashboard-1.0.0/src/truthound_dashboard/cli.py +226 -0
  121. truthound_dashboard-1.0.0/src/truthound_dashboard/config.py +132 -0
  122. truthound_dashboard-1.0.0/src/truthound_dashboard/core/__init__.py +264 -0
  123. truthound_dashboard-1.0.0/src/truthound_dashboard/core/base.py +185 -0
  124. truthound_dashboard-1.0.0/src/truthound_dashboard/core/cache.py +479 -0
  125. truthound_dashboard-1.0.0/src/truthound_dashboard/core/connections.py +331 -0
  126. truthound_dashboard-1.0.0/src/truthound_dashboard/core/encryption.py +409 -0
  127. truthound_dashboard-1.0.0/src/truthound_dashboard/core/exceptions.py +627 -0
  128. truthound_dashboard-1.0.0/src/truthound_dashboard/core/logging.py +488 -0
  129. truthound_dashboard-1.0.0/src/truthound_dashboard/core/maintenance.py +542 -0
  130. truthound_dashboard-1.0.0/src/truthound_dashboard/core/notifications/__init__.py +56 -0
  131. truthound_dashboard-1.0.0/src/truthound_dashboard/core/notifications/base.py +390 -0
  132. truthound_dashboard-1.0.0/src/truthound_dashboard/core/notifications/channels.py +557 -0
  133. truthound_dashboard-1.0.0/src/truthound_dashboard/core/notifications/dispatcher.py +453 -0
  134. truthound_dashboard-1.0.0/src/truthound_dashboard/core/notifications/events.py +155 -0
  135. truthound_dashboard-1.0.0/src/truthound_dashboard/core/notifications/service.py +744 -0
  136. truthound_dashboard-1.0.0/src/truthound_dashboard/core/sampling.py +626 -0
  137. truthound_dashboard-1.0.0/src/truthound_dashboard/core/scheduler.py +311 -0
  138. truthound_dashboard-1.0.0/src/truthound_dashboard/core/services.py +1531 -0
  139. truthound_dashboard-1.0.0/src/truthound_dashboard/core/truthound_adapter.py +659 -0
  140. truthound_dashboard-1.0.0/src/truthound_dashboard/db/__init__.py +67 -0
  141. truthound_dashboard-1.0.0/src/truthound_dashboard/db/base.py +108 -0
  142. truthound_dashboard-1.0.0/src/truthound_dashboard/db/database.py +196 -0
  143. truthound_dashboard-1.0.0/src/truthound_dashboard/db/models.py +732 -0
  144. truthound_dashboard-1.0.0/src/truthound_dashboard/db/repository.py +237 -0
  145. truthound_dashboard-1.0.0/src/truthound_dashboard/main.py +309 -0
  146. truthound_dashboard-1.0.0/src/truthound_dashboard/schemas/__init__.py +150 -0
  147. truthound_dashboard-1.0.0/src/truthound_dashboard/schemas/base.py +96 -0
  148. truthound_dashboard-1.0.0/src/truthound_dashboard/schemas/drift.py +118 -0
  149. truthound_dashboard-1.0.0/src/truthound_dashboard/schemas/history.py +74 -0
  150. truthound_dashboard-1.0.0/src/truthound_dashboard/schemas/profile.py +91 -0
  151. truthound_dashboard-1.0.0/src/truthound_dashboard/schemas/rule.py +199 -0
  152. truthound_dashboard-1.0.0/src/truthound_dashboard/schemas/schedule.py +88 -0
  153. truthound_dashboard-1.0.0/src/truthound_dashboard/schemas/schema.py +121 -0
  154. truthound_dashboard-1.0.0/src/truthound_dashboard/schemas/source.py +138 -0
  155. truthound_dashboard-1.0.0/src/truthound_dashboard/schemas/validation.py +192 -0
  156. truthound_dashboard-1.0.0/src/truthound_dashboard/static/assets/index-BqJMyAHX.js +110 -0
  157. truthound_dashboard-1.0.0/src/truthound_dashboard/static/assets/index-DMDxHCTs.js +465 -0
  158. truthound_dashboard-1.0.0/src/truthound_dashboard/static/assets/index-Dm2D11TK.css +1 -0
  159. truthound_dashboard-1.0.0/src/truthound_dashboard/static/index.html +15 -0
  160. truthound_dashboard-1.0.0/src/truthound_dashboard/static/mockServiceWorker.js +349 -0
  161. truthound_dashboard-1.0.0/tests/__init__.py +1 -0
  162. truthound_dashboard-1.0.0/tests/conftest.py +125 -0
  163. truthound_dashboard-1.0.0/tests/test_api/__init__.py +1 -0
  164. truthound_dashboard-1.0.0/tests/test_api/test_health.py +27 -0
  165. truthound_dashboard-1.0.0/tests/test_api/test_rules.py +351 -0
  166. truthound_dashboard-1.0.0/tests/test_api/test_sources.py +164 -0
  167. truthound_dashboard-1.0.0/tests/test_core/__init__.py +1 -0
  168. truthound_dashboard-1.0.0/tests/test_core/test_services.py +219 -0
  169. truthound_dashboard-1.0.0/tests/test_db/__init__.py +1 -0
  170. truthound_dashboard-1.0.0/tests/test_db/test_models.py +128 -0
  171. truthound_dashboard-1.0.0/tests/test_phase4.py +727 -0
@@ -0,0 +1,214 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ lint:
15
+ name: Lint
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Set up Python
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: "3.11"
24
+
25
+ - name: Install dependencies
26
+ run: |
27
+ python -m pip install --upgrade pip
28
+ pip install ruff black mypy
29
+
30
+ - name: Check formatting with Black
31
+ run: black --check src tests
32
+
33
+ - name: Lint with Ruff
34
+ run: ruff check src tests
35
+
36
+ test:
37
+ name: Test Python ${{ matrix.python-version }}
38
+ runs-on: ubuntu-latest
39
+ strategy:
40
+ fail-fast: false
41
+ matrix:
42
+ python-version: ["3.11", "3.12"]
43
+
44
+ steps:
45
+ - uses: actions/checkout@v4
46
+
47
+ - name: Set up Python ${{ matrix.python-version }}
48
+ uses: actions/setup-python@v5
49
+ with:
50
+ python-version: ${{ matrix.python-version }}
51
+ cache: "pip"
52
+
53
+ - name: Install dependencies
54
+ run: |
55
+ python -m pip install --upgrade pip
56
+ pip install -e ".[dev]"
57
+
58
+ - name: Run tests with pytest
59
+ run: pytest --cov=truthound_dashboard --cov-report=xml --cov-report=term-missing -v
60
+
61
+ - name: Upload coverage reports
62
+ uses: codecov/codecov-action@v4
63
+ if: matrix.python-version == '3.11'
64
+ with:
65
+ file: ./coverage.xml
66
+ fail_ci_if_error: false
67
+ token: ${{ secrets.CODECOV_TOKEN }}
68
+
69
+ build-frontend:
70
+ name: Build Frontend
71
+ runs-on: ubuntu-latest
72
+ steps:
73
+ - uses: actions/checkout@v4
74
+
75
+ - name: Setup Node.js
76
+ uses: actions/setup-node@v4
77
+ with:
78
+ node-version: "18"
79
+ cache: "npm"
80
+ cache-dependency-path: frontend/package-lock.json
81
+
82
+ - name: Install dependencies
83
+ working-directory: frontend
84
+ run: npm ci
85
+
86
+ - name: Type check
87
+ working-directory: frontend
88
+ run: npm run type-check
89
+
90
+ - name: Lint
91
+ working-directory: frontend
92
+ run: npm run lint
93
+
94
+ - name: Build
95
+ working-directory: frontend
96
+ run: npm run build
97
+
98
+ - name: Upload build artifacts
99
+ uses: actions/upload-artifact@v4
100
+ with:
101
+ name: frontend-build
102
+ path: src/truthound_dashboard/static
103
+ retention-days: 7
104
+
105
+ e2e:
106
+ name: E2E Tests
107
+ runs-on: ubuntu-latest
108
+ needs: [build-frontend]
109
+ steps:
110
+ - uses: actions/checkout@v4
111
+
112
+ - name: Set up Python
113
+ uses: actions/setup-python@v5
114
+ with:
115
+ python-version: "3.11"
116
+ cache: "pip"
117
+
118
+ - name: Install backend dependencies
119
+ run: |
120
+ python -m pip install --upgrade pip
121
+ pip install -e ".[dev]"
122
+
123
+ - name: Download frontend build
124
+ uses: actions/download-artifact@v4
125
+ with:
126
+ name: frontend-build
127
+ path: src/truthound_dashboard/static
128
+
129
+ - name: Setup Node.js
130
+ uses: actions/setup-node@v4
131
+ with:
132
+ node-version: "18"
133
+ cache: "npm"
134
+ cache-dependency-path: frontend/package-lock.json
135
+
136
+ - name: Install Playwright
137
+ working-directory: frontend
138
+ run: |
139
+ npm ci
140
+ npx playwright install --with-deps chromium
141
+
142
+ - name: Run E2E tests
143
+ working-directory: frontend
144
+ run: npx playwright test
145
+ env:
146
+ CI: true
147
+
148
+ - name: Upload Playwright report
149
+ uses: actions/upload-artifact@v4
150
+ if: failure()
151
+ with:
152
+ name: playwright-report
153
+ path: frontend/playwright-report/
154
+ retention-days: 7
155
+
156
+ security:
157
+ name: Security Scan
158
+ runs-on: ubuntu-latest
159
+ steps:
160
+ - uses: actions/checkout@v4
161
+
162
+ - name: Set up Python
163
+ uses: actions/setup-python@v5
164
+ with:
165
+ python-version: "3.11"
166
+
167
+ - name: Install dependencies
168
+ run: |
169
+ python -m pip install --upgrade pip
170
+ pip install pip-audit bandit
171
+
172
+ - name: Run pip-audit
173
+ run: pip-audit || true
174
+ continue-on-error: true
175
+
176
+ - name: Run Bandit security scan
177
+ run: bandit -r src/truthound_dashboard -ll -ii || true
178
+ continue-on-error: true
179
+
180
+ build-package:
181
+ name: Build Package
182
+ runs-on: ubuntu-latest
183
+ needs: [lint, test, build-frontend]
184
+ steps:
185
+ - uses: actions/checkout@v4
186
+
187
+ - name: Set up Python
188
+ uses: actions/setup-python@v5
189
+ with:
190
+ python-version: "3.11"
191
+
192
+ - name: Download frontend build
193
+ uses: actions/download-artifact@v4
194
+ with:
195
+ name: frontend-build
196
+ path: src/truthound_dashboard/static
197
+
198
+ - name: Install build tools
199
+ run: |
200
+ python -m pip install --upgrade pip
201
+ pip install build twine
202
+
203
+ - name: Build package
204
+ run: python -m build
205
+
206
+ - name: Check package
207
+ run: twine check dist/*
208
+
209
+ - name: Upload package artifacts
210
+ uses: actions/upload-artifact@v4
211
+ with:
212
+ name: dist
213
+ path: dist/
214
+ retention-days: 7
@@ -0,0 +1,57 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ jobs:
9
+ build:
10
+ name: Build and Release
11
+ runs-on: ubuntu-latest
12
+ permissions:
13
+ contents: write
14
+ id-token: write
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.11"
23
+
24
+ - name: Setup Node.js
25
+ uses: actions/setup-node@v4
26
+ with:
27
+ node-version: "18"
28
+
29
+ - name: Install frontend dependencies
30
+ working-directory: frontend
31
+ run: npm ci
32
+
33
+ - name: Build frontend
34
+ working-directory: frontend
35
+ run: npm run build
36
+
37
+ - name: Install Python build tools
38
+ run: |
39
+ python -m pip install --upgrade pip
40
+ pip install build twine
41
+
42
+ - name: Build package
43
+ run: python -m build
44
+
45
+ - name: Check package
46
+ run: twine check dist/*
47
+
48
+ - name: Create GitHub Release
49
+ uses: softprops/action-gh-release@v1
50
+ with:
51
+ files: dist/*
52
+ generate_release_notes: true
53
+
54
+ - name: Publish to PyPI
55
+ uses: pypa/gh-action-pypi-publish@release/v1
56
+ with:
57
+ password: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,16 @@
1
+ # Trigger truthound docs site rebuild when dashboard docs change
2
+ name: Trigger Docs Build
3
+
4
+ on:
5
+ push:
6
+ branches: [main]
7
+ paths:
8
+ - 'docs/**'
9
+
10
+ jobs:
11
+ trigger:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - name: Trigger Netlify build
15
+ run: |
16
+ curl -X POST -d {} "${{ secrets.NETLIFY_DOCS_BUILD_HOOK }}"
@@ -0,0 +1,162 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ /lib/
18
+ /lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ *.manifest
31
+ *.spec
32
+
33
+ # Installer logs
34
+ pip-log.txt
35
+ pip-delete-this-directory.txt
36
+
37
+ # Unit test / coverage reports
38
+ htmlcov/
39
+ .tox/
40
+ .nox/
41
+ .coverage
42
+ .coverage.*
43
+ .cache
44
+ nosetests.xml
45
+ coverage.xml
46
+ *.cover
47
+ *.py,cover
48
+ .hypothesis/
49
+ .pytest_cache/
50
+
51
+ # Translations
52
+ *.mo
53
+ *.pot
54
+
55
+ # Django stuff:
56
+ *.log
57
+ local_settings.py
58
+ db.sqlite3
59
+ db.sqlite3-journal
60
+
61
+ # Flask stuff:
62
+ instance/
63
+ .webassets-cache
64
+
65
+ # Scrapy stuff:
66
+ .scrapy
67
+
68
+ # Sphinx documentation
69
+ docs/_build/
70
+
71
+ # PyBuilder
72
+ .pybuilder/
73
+ target/
74
+
75
+ # Jupyter Notebook
76
+ .ipynb_checkpoints
77
+
78
+ # IPython
79
+ profile_default/
80
+ ipython_config.py
81
+
82
+ # pyenv
83
+ .python-version
84
+
85
+ # pipenv
86
+ Pipfile.lock
87
+
88
+ # PEP 582
89
+ __pypackages__/
90
+
91
+ # Celery stuff
92
+ celerybeat-schedule
93
+ celerybeat.pid
94
+
95
+ # SageMath parsed files
96
+ *.sage.py
97
+
98
+ # Environments
99
+ .env
100
+ .venv
101
+ env/
102
+ venv/
103
+ ENV/
104
+ env.bak/
105
+ venv.bak/
106
+
107
+ # Spyder project settings
108
+ .spyderproject
109
+ .spyproject
110
+
111
+ # Rope project settings
112
+ .ropeproject
113
+
114
+ # mkdocs documentation
115
+ /site
116
+
117
+ # mypy
118
+ .mypy_cache/
119
+ .dmypy.json
120
+ dmypy.json
121
+
122
+ # Pyre type checker
123
+ .pyre/
124
+
125
+ # pytype static type analyzer
126
+ .pytype/
127
+
128
+ # Cython debug symbols
129
+ cython_debug/
130
+
131
+ # VS Code
132
+ .vscode/
133
+
134
+ # IDE
135
+ .idea/
136
+ *.swp
137
+ *.swo
138
+
139
+ # Node
140
+ node_modules/
141
+ npm-debug.log*
142
+ yarn-debug.log*
143
+ yarn-error.log*
144
+
145
+ # Frontend build output (handled by build process)
146
+ # src/truthound_dashboard/static/
147
+
148
+ # Local development
149
+ .truthound/
150
+ *.db
151
+
152
+ # OS
153
+ .DS_Store
154
+ Thumbs.db
155
+
156
+ # Test
157
+ .pytest_cache/
158
+ htmlcov/
159
+
160
+ # Claude
161
+ .claude/
162
+ CLAUDE.md
@@ -0,0 +1,218 @@
1
+ Metadata-Version: 2.4
2
+ Name: truthound-dashboard
3
+ Version: 1.0.0
4
+ Summary: Open-source data quality dashboard - GX Cloud alternative
5
+ Author-email: Truthound Team <team@truthound.dev>
6
+ License-Expression: MIT
7
+ Keywords: dashboard,data-quality,monitoring,truthound,validation
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Framework :: FastAPI
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Intended Audience :: Science/Research
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Topic :: Database
17
+ Classifier: Topic :: Scientific/Engineering
18
+ Requires-Python: >=3.11
19
+ Requires-Dist: aiosmtplib>=3.0.0
20
+ Requires-Dist: aiosqlite>=0.19.0
21
+ Requires-Dist: apscheduler>=3.10.0
22
+ Requires-Dist: cryptography>=41.0.0
23
+ Requires-Dist: fastapi>=0.110.0
24
+ Requires-Dist: httpx>=0.26.0
25
+ Requires-Dist: polars>=0.20.0
26
+ Requires-Dist: pydantic-settings>=2.1.0
27
+ Requires-Dist: pydantic>=2.5.0
28
+ Requires-Dist: pyyaml>=6.0.0
29
+ Requires-Dist: rich>=13.0.0
30
+ Requires-Dist: sqlalchemy[asyncio]>=2.0.0
31
+ Requires-Dist: truthound>=1.0.5
32
+ Requires-Dist: typer>=0.9.0
33
+ Requires-Dist: uvicorn[standard]>=0.27.0
34
+ Provides-Extra: dev
35
+ Requires-Dist: black>=23.0.0; extra == 'dev'
36
+ Requires-Dist: httpx>=0.26.0; extra == 'dev'
37
+ Requires-Dist: mypy>=1.8.0; extra == 'dev'
38
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
39
+ Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
40
+ Requires-Dist: pytest>=7.4.0; extra == 'dev'
41
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
42
+ Description-Content-Type: text/markdown
43
+
44
+ # truthound-dashboard
45
+
46
+ A web-based data quality monitoring dashboard for [truthound](https://github.com/seadonggyun4/truthound).
47
+
48
+ [Documentation](https://truthound.netlify.app) | [Live Demo](https://truthound-dashboard.netlify.app)
49
+
50
+ ## Overview
51
+
52
+ truthound-dashboard provides a graphical interface for managing data sources, executing validations, tracking historical results, scheduling automated checks, and configuring notifications. It serves as an alternative to commercial data quality platforms.
53
+
54
+ ## Feature Comparison with GX Cloud
55
+
56
+ | Feature | GX Cloud (Paid) | truthound-dashboard |
57
+ |---------|-----------------|---------------------|
58
+ | Data Source Management | Available | Available |
59
+ | Schema Learning | Available | Available |
60
+ | Validation Execution | Available | Available |
61
+ | Validation History | Available | Available |
62
+ | Scheduled Validations | Available | Available |
63
+ | Slack Notifications | Available | Available |
64
+ | Email Notifications | Available | Available |
65
+ | Webhook Notifications | Available | Available |
66
+ | Drift Detection | Available | Available |
67
+ | Data Profiling | Available | Available |
68
+ | Dark Mode | Available | Available |
69
+ | Multi-language (en/ko) | Not Available | Available |
70
+ | License | Commercial | MIT |
71
+
72
+ ## Requirements
73
+
74
+ - Python 3.11 or higher
75
+ - truthound >= 1.0.5
76
+
77
+ ## Installation
78
+
79
+ ```bash
80
+ pip install truthound-dashboard
81
+ ```
82
+
83
+ This command automatically installs [truthound](https://github.com/seadonggyun4/truthound) as a dependency.
84
+
85
+ ## Usage
86
+
87
+ ```bash
88
+ # Start the dashboard server (default port: 8765)
89
+ truthound serve
90
+
91
+ # Specify a custom port
92
+ truthound serve --port 9000
93
+
94
+ # Enable development mode with hot reload
95
+ truthound serve --reload
96
+
97
+ # Disable automatic browser opening
98
+ truthound serve --no-browser
99
+ ```
100
+
101
+ The dashboard interface is accessible at `http://localhost:8765`.
102
+
103
+ ## Implemented Features
104
+
105
+ ### Data Source Management
106
+ - Supported file formats: CSV, Parquet
107
+ - Supported databases: PostgreSQL, MySQL, Snowflake, BigQuery
108
+ - Connection validation
109
+
110
+ ### Schema Management
111
+ - Automated schema generation using `th.learn`
112
+ - Manual schema editing in YAML format
113
+
114
+ ### Validation
115
+ - On-demand validation execution using `th.check`
116
+ - Persistent storage of validation results
117
+ - Issue classification by severity (Critical, High, Medium, Low)
118
+
119
+ ### Validation History
120
+ - Historical record of validation results
121
+ - Trend visualization
122
+
123
+ ### Scheduling
124
+ - Cron-based scheduling using APScheduler
125
+ - Schedule controls: pause, resume, immediate execution
126
+
127
+ ### Notifications
128
+ - Supported channels: Slack, Email, Webhook
129
+ - Configurable notification rules based on validation outcomes
130
+ - Notification delivery logs
131
+
132
+ ### Drift Detection
133
+ - Dataset comparison using `th.compare`
134
+ - Column-level drift analysis
135
+
136
+ ### Data Profiling
137
+ - Statistical profiling using `th.profile`
138
+ - Column-level statistics
139
+
140
+ ### User Interface
141
+ - Light and dark theme support
142
+ - Internationalization: English, Korean
143
+
144
+ ## Technology Stack
145
+
146
+ **Backend**
147
+ - FastAPI
148
+ - SQLAlchemy 2.0 (async)
149
+ - SQLite with aiosqlite
150
+ - APScheduler
151
+ - Pydantic 2.x
152
+
153
+ **Frontend**
154
+ - React 18
155
+ - TypeScript
156
+ - Vite
157
+ - TailwindCSS
158
+ - shadcn/ui
159
+ - Zustand
160
+ - i18next
161
+
162
+ ## Development Setup
163
+
164
+ ```bash
165
+ # Clone the repository
166
+ git clone https://github.com/seadonggyun4/truthound-dashboard
167
+ cd truthound-dashboard
168
+
169
+ # Install backend dependencies
170
+ pip install -e ".[dev]"
171
+
172
+ # Start the backend server
173
+ truthound serve --reload
174
+
175
+ # In a separate terminal, install frontend dependencies
176
+ cd frontend
177
+ npm install
178
+
179
+ # Start the frontend development server
180
+ npm run dev
181
+
182
+ # Alternative: run with mock API (backend not required)
183
+ npm run dev:mock
184
+ ```
185
+
186
+ ## Testing
187
+
188
+ ```bash
189
+ # Run tests
190
+ pytest
191
+
192
+ # Run tests with coverage report
193
+ pytest --cov=truthound_dashboard
194
+ ```
195
+
196
+ ## Live Demo
197
+
198
+ A live demonstration is available at [https://truthound-dashboard.netlify.app](https://truthound-dashboard.netlify.app).
199
+
200
+ The demo instance operates using Mock Service Worker (MSW) with simulated data and does not require a backend connection.
201
+
202
+ ## Documentation
203
+
204
+ Full documentation is available at [https://truthound.netlify.app](https://truthound.netlify.app).
205
+
206
+ - [Getting Started](./docs/getting-started.md)
207
+ - [Features](./docs/features.md)
208
+ - [API Reference](./docs/api.md)
209
+ - [Configuration](./docs/configuration.md)
210
+
211
+ ## Related Projects
212
+
213
+ - [truthound](https://github.com/seadonggyun4/truthound) - Core data validation library
214
+ - [truthound-orchestration](https://github.com/seadonggyun4/truthound-orchestration) - Pipeline orchestration integration
215
+
216
+ ## License
217
+
218
+ This project is licensed under the MIT License.