Homepage: tab layout, RSS proxy, and deploy docs
- Reorganize services into OPS/DATA/FEEDS/LINKS tabs with compact DB grid - Add rss-proxy service (29 FDE feeds) and Intel feed groups - Update Palantir theme CSS/JS; Dell wordmark SVG; Proxmox API token auth - Add deploy/docker-compose.homepage.yml and config/homepage/README.md - Stop tracking runtime logs; add .gitignore
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
# Runtime logs (not config)
|
||||
config/homepage/logs/
|
||||
*.log
|
||||
|
||||
# OS / editor
|
||||
.DS_Store
|
||||
*~
|
||||
@@ -0,0 +1,38 @@
|
||||
# ATC Lakehouse Homepage
|
||||
|
||||
Palantir-style ops dashboard for Forward Deployed Engineering (Dell ATC).
|
||||
|
||||
## Tabs
|
||||
|
||||
| Tab | Content |
|
||||
|-----|---------|
|
||||
| OPS | Data pipeline, analytics, infrastructure, Docker |
|
||||
| DATA | Database connection tiles (db01 + db02) |
|
||||
| FEEDS | Live RSS widgets via `rss-proxy` |
|
||||
| LINKS | Static docs & bookmarks (no RSS) |
|
||||
|
||||
## Key files
|
||||
|
||||
- `settings.yaml` — layout, tabs, theme
|
||||
- `services.yaml` — service tiles, widgets, DB URIs
|
||||
- `widgets.yaml` — header logo, Proxmox widget
|
||||
- `proxmox.yaml` — Proxmox API token (keep private)
|
||||
- `docker.yaml` — Docker socket integration
|
||||
- `custom.css` / `custom.js` — Palantir theme, scanlines
|
||||
|
||||
## RSS proxy
|
||||
|
||||
Feeds are defined in `../../rss-proxy/server.py`. Rebuild after changes:
|
||||
|
||||
```bash
|
||||
cd /root/lakehouse/rss-proxy && docker build -t rss-proxy:latest .
|
||||
docker restart rss-proxy
|
||||
docker exec homepage wget -qO- http://127.0.0.1:3000/api/revalidate
|
||||
```
|
||||
|
||||
## Deploy
|
||||
|
||||
```bash
|
||||
cd /root/lakehouse
|
||||
docker compose -f deploy/docker-compose.homepage.yml up -d --build
|
||||
```
|
||||
+788
-203
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,37 @@
|
||||
/* ATC Lakehouse — scanlines + noise only (tabs via settings.yaml) */
|
||||
(function () {
|
||||
function injectOverlays() {
|
||||
if (!document.querySelector('.palantir-scanline')) {
|
||||
const scan = document.createElement('div');
|
||||
scan.className = 'palantir-scanline';
|
||||
document.body.appendChild(scan);
|
||||
}
|
||||
if (!document.querySelector('.palantir-noise')) {
|
||||
const noise = document.createElement('div');
|
||||
noise.className = 'palantir-noise';
|
||||
document.body.appendChild(noise);
|
||||
}
|
||||
}
|
||||
|
||||
function applyServiceColors() {
|
||||
document.querySelectorAll('li.service').forEach(function (card) {
|
||||
const desc = card.querySelector('.service-description');
|
||||
const text = desc ? desc.textContent : '';
|
||||
const link = card.querySelector('a[href^="http"]');
|
||||
if (text.indexOf('Host:') >= 0 || text.indexOf('Port:') >= 0 || !link) {
|
||||
card.classList.add('atc-db-tile');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function init() {
|
||||
injectOverlays();
|
||||
applyServiceColors();
|
||||
}
|
||||
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', init);
|
||||
} else {
|
||||
init();
|
||||
}
|
||||
})();
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 56" role="img" aria-label="Dell Technologies">
|
||||
<defs>
|
||||
<linearGradient id="dellRing" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#007DB8"/>
|
||||
<stop offset="100%" style="stop-color:#00a3e0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="dellText" x1="0%" y1="0%" x2="100%" y2="0%">
|
||||
<stop offset="0%" style="stop-color:#ffffff"/>
|
||||
<stop offset="70%" style="stop-color:#ffffff"/>
|
||||
<stop offset="100%" style="stop-color:#E8752A"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<circle cx="28" cy="28" r="24" fill="url(#dellRing)"/>
|
||||
<circle cx="28" cy="28" r="20" fill="#0a0e14"/>
|
||||
<text x="28" y="35" text-anchor="middle" fill="#ffffff" font-family="Arial,Helvetica,sans-serif" font-size="26" font-weight="700">D</text>
|
||||
<text x="62" y="36" fill="url(#dellText)" font-family="Arial,Helvetica,sans-serif" font-size="24" font-weight="700" letter-spacing="1">DELL</text>
|
||||
<text x="138" y="36" fill="#E8752A" font-family="Arial,Helvetica,sans-serif" font-size="20" font-weight="600">Technologies</text>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 0 B |
@@ -1,4 +1,3 @@
|
||||
---
|
||||
# Docker integration — socket on atc-docker01
|
||||
local:
|
||||
my-docker:
|
||||
socket: /var/run/docker.sock
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg fill="#E02014" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Apache Kafka</title><path d="M9.71 2.136a1.43 1.43 0 0 0-2.047 0h-.007a1.48 1.48 0 0 0-.421 1.042c0 .41.161.777.422 1.039l.007.007c.257.264.616.426 1.019.426.404 0 .766-.162 1.027-.426l.003-.007c.261-.262.421-.629.421-1.039 0-.408-.159-.777-.421-1.042H9.71zM8.683 22.295c.404 0 .766-.167 1.027-.429l.003-.008c.261-.261.421-.631.421-1.036 0-.41-.159-.778-.421-1.044H9.71a1.42 1.42 0 0 0-1.027-.432 1.4 1.4 0 0 0-1.02.432h-.007c-.26.266-.422.634-.422 1.044 0 .406.161.775.422 1.036l.007.008c.258.262.617.429 1.02.429zm7.89-4.462c.359-.096.683-.33.882-.684l.027-.052a1.47 1.47 0 0 0 .114-1.067 1.454 1.454 0 0 0-.675-.896l-.021-.014a1.425 1.425 0 0 0-1.078-.132c-.36.091-.684.335-.881.686-.2.349-.241.75-.146 1.119.099.363.33.691.675.896h.002c.346.203.737.239 1.101.144zm-6.405-7.342a2.083 2.083 0 0 0-1.485-.627c-.58 0-1.103.242-1.482.627-.378.385-.612.916-.612 1.507s.233 1.124.612 1.514a2.08 2.08 0 0 0 2.967 0c.379-.39.612-.923.612-1.514s-.233-1.122-.612-1.507zm-.835-2.51c.843.141 1.6.552 2.178 1.144h.004c.092.093.182.196.265.299l1.446-.851a3.176 3.176 0 0 1-.047-1.808 3.149 3.149 0 0 1 1.456-1.926l.025-.016a3.062 3.062 0 0 1 2.345-.306c.77.21 1.465.721 1.898 1.482v.002c.431.757.518 1.626.313 2.408a3.145 3.145 0 0 1-1.456 1.928l-.198.118h-.02a3.095 3.095 0 0 1-2.154.201 3.127 3.127 0 0 1-1.514-.944l-1.444.848a4.162 4.162 0 0 1 0 2.879l1.444.846c.413-.47.939-.789 1.514-.944a3.041 3.041 0 0 1 2.371.319l.048.023v.002a3.17 3.17 0 0 1 1.408 1.906 3.215 3.215 0 0 1-.313 2.405l-.026.053-.003-.005a3.147 3.147 0 0 1-1.867 1.436 3.096 3.096 0 0 1-2.371-.318v-.006a3.156 3.156 0 0 1-1.456-1.927 3.175 3.175 0 0 1 .047-1.805l-1.446-.848a3.905 3.905 0 0 1-.265.294l-.004.005a3.938 3.938 0 0 1-2.178 1.138v1.699a3.09 3.09 0 0 1 1.56.862l.002.004c.565.572.914 1.368.914 2.243 0 .873-.35 1.664-.914 2.239l-.002.009a3.1 3.1 0 0 1-2.21.931 3.1 3.1 0 0 1-2.206-.93h-.002v-.009a3.186 3.186 0 0 1-.916-2.239c0-.875.35-1.672.916-2.243v-.004h.002a3.1 3.1 0 0 1 1.558-.862v-1.699a3.926 3.926 0 0 1-2.176-1.138l-.006-.005a4.098 4.098 0 0 1-1.173-2.874c0-1.122.452-2.136 1.173-2.872h.006a3.947 3.947 0 0 1 2.176-1.144V6.289a3.137 3.137 0 0 1-1.558-.864h-.002v-.004a3.192 3.192 0 0 1-.916-2.243c0-.871.35-1.669.916-2.243l.002-.002A3.084 3.084 0 0 1 8.683 0c.861 0 1.641.355 2.21.932v.002h.002c.565.574.914 1.372.914 2.243 0 .876-.35 1.667-.914 2.243l-.002.005a3.142 3.142 0 0 1-1.56.864v1.692zm8.121-1.129l-.012-.019a1.452 1.452 0 0 0-.87-.668 1.43 1.43 0 0 0-1.103.146h.002c-.347.2-.58.529-.677.896-.095.365-.054.768.146 1.119l.007.009c.2.347.519.579.874.673.357.103.755.059 1.098-.144l.019-.009a1.47 1.47 0 0 0 .657-.885 1.493 1.493 0 0 0-.141-1.118"/></svg>
|
||||
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 2.7 KiB |
@@ -1,18 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 56" role="img" aria-label="Dell Technologies">
|
||||
<defs>
|
||||
<linearGradient id="dellRing" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#007DB8"/>
|
||||
<stop offset="100%" style="stop-color:#00a3e0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="dellText" x1="0%" y1="0%" x2="100%" y2="0%">
|
||||
<stop offset="0%" style="stop-color:#ffffff"/>
|
||||
<stop offset="70%" style="stop-color:#ffffff"/>
|
||||
<stop offset="100%" style="stop-color:#E8752A"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<circle cx="28" cy="28" r="24" fill="url(#dellRing)"/>
|
||||
<circle cx="28" cy="28" r="20" fill="#0a0e14"/>
|
||||
<text x="28" y="35" text-anchor="middle" fill="#ffffff" font-family="Arial,Helvetica,sans-serif" font-size="26" font-weight="700">D</text>
|
||||
<text x="62" y="36" fill="url(#dellText)" font-family="Arial,Helvetica,sans-serif" font-size="24" font-weight="700" letter-spacing="1">DELL</text>
|
||||
<text x="138" y="36" fill="#E8752A" font-family="Arial,Helvetica,sans-serif" font-size="20" font-weight="600">Technologies</text>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 40" role="img" aria-label="Dell Technologies">
|
||||
<text x="0" y="29" fill="#FFFFFF" font-family="Arial, Helvetica, sans-serif" font-size="24" font-weight="700" letter-spacing="0.5">DELL</text>
|
||||
<text x="78" y="29" fill="#8FA3B8" font-family="Arial, Helvetica, sans-serif" font-size="20" font-weight="400">Technologies</text>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 389 B |
@@ -1,7 +0,0 @@
|
||||
[2026-05-19T15:50:52.333Z] info: kubernetes.yaml was copied to the config folder
|
||||
[2026-05-19T15:51:22.251Z] error: Host validation failed for: atc-docker01.dell-atc.lan. Hint: Set the HOMEPAGE_ALLOWED_HOSTS environment variable to allow requests from this host / port.
|
||||
[2026-05-19T15:52:02.580Z] info: docker.yaml was copied to the config folder
|
||||
[2026-05-19T15:52:22.162Z] info: bookmarks.yaml was copied to the config folder
|
||||
[2026-05-19T15:52:22.162Z] info: widgets.yaml was copied to the config folder
|
||||
[2026-05-19T15:52:22.164Z] info: custom.js was copied to the config folder
|
||||
[2026-05-19T16:55:57.843Z] error: <credentialedProxyHandler> HTTP Error 401 calling https://10.0.10.65:8006/api2/json/cluster/resources
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
pve:
|
||||
pve01:
|
||||
url: https://10.0.10.65:8006
|
||||
username: root@pam
|
||||
password: Dell2026!
|
||||
token: "root@pam!homepage"
|
||||
secret: "8890185b-0850-42b7-bab2-a690ea4dc3f1"
|
||||
|
||||
+413
-141
@@ -5,290 +5,562 @@
|
||||
- Kafka UI:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/apachekafka.svg
|
||||
href: http://atc-kafka01.dell-atc.lan:9000/
|
||||
description: Kafka cluster UI
|
||||
description: atc-kafka01.dell-atc.lan:9000
|
||||
siteMonitor: http://atc-kafka01.dell-atc.lan:9000/
|
||||
color: "#E02014"
|
||||
- Debezium:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/debezium.png
|
||||
href: http://atc-lake01.dell-atc.lan:8083/
|
||||
description: CDC connectors
|
||||
description: atc-lake01.dell-atc.lan:8083
|
||||
siteMonitor: http://atc-lake01.dell-atc.lan:8083/
|
||||
color: "#4ECDC4"
|
||||
- Spark:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/apachespark.svg
|
||||
href: http://atc-lake01.dell-atc.lan:8080/
|
||||
description: Spark master UI
|
||||
description: atc-lake01.dell-atc.lan:8080
|
||||
siteMonitor: http://atc-lake01.dell-atc.lan:8080/
|
||||
color: "#E25A1C"
|
||||
- Trino:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/trino.svg
|
||||
href: http://atc-lake01.dell-atc.lan:8089/
|
||||
description: Distributed SQL
|
||||
href: http://atc-lake01.dell-atc.lan:8089/ui/
|
||||
description: atc-lake01.dell-atc.lan:8089/ui/
|
||||
siteMonitor: http://atc-lake01.dell-atc.lan:8089/ui/
|
||||
color: "#DD00A1"
|
||||
- Airflow:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/apacheairflow.svg
|
||||
href: http://10.0.21.55:8080/
|
||||
description: Workflow orchestration
|
||||
siteMonitor: http://10.0.21.55:8080/
|
||||
description: 10.0.21.55:8080
|
||||
siteMonitor: http://10.0.21.55:8080/health
|
||||
color: "#017CEE"
|
||||
|
||||
- Analytics:
|
||||
- Superset:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/apachesuperset.svg
|
||||
href: http://atc-docker01.dell-atc.lan:8088/
|
||||
description: BI dashboards
|
||||
description: atc-docker01.dell-atc.lan:8088
|
||||
siteMonitor: http://atc-docker01.dell-atc.lan:8088/health
|
||||
color: "#6c5ce7"
|
||||
- Kibana:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/kibana.svg
|
||||
href: http://atc-elastic01.dell-atc.lan:5601/
|
||||
description: Elasticsearch UI
|
||||
description: atc-elastic01.dell-atc.lan:5601
|
||||
siteMonitor: http://atc-elastic01.dell-atc.lan:5601/
|
||||
color: "#F04E98"
|
||||
- Elasticsearch API:
|
||||
- Elasticsearch:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/elasticsearch.svg
|
||||
ping: atc-elastic01.dell-atc.lan
|
||||
description: |
|
||||
Host: atc-elastic01.dell-atc.lan
|
||||
Port: 9200 (internal/VLAN)
|
||||
Port: 9200 (no public HTTP)
|
||||
curl: curl http://atc-elastic01.dell-atc.lan:9200
|
||||
Note: use Kibana for browser access
|
||||
Use Kibana for browser UI
|
||||
color: "#005571"
|
||||
- Grafana:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/grafana.svg
|
||||
href: http://atc-grafana.dell-atc.lan:3000/
|
||||
ping: atc-grafana.dell-atc.lan
|
||||
description: |
|
||||
Host: atc-grafana.dell-atc.lan (10.0.20.103)
|
||||
Host: atc-grafana.dell-atc.lan
|
||||
IP: 10.0.20.103
|
||||
Port: 3000
|
||||
Status: service stopped
|
||||
Start: systemctl start grafana-server
|
||||
Note: start with systemctl start grafana-server
|
||||
siteMonitor: http://atc-grafana.dell-atc.lan:3000/
|
||||
color: "#F46800"
|
||||
|
||||
- Infrastructure:
|
||||
- ObjectScale:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/dell.svg
|
||||
href: https://10.0.20.111/
|
||||
description: Dell ObjectScale S3
|
||||
description: 10.0.20.111
|
||||
siteMonitor: https://10.0.20.111/
|
||||
color: "#007DB8"
|
||||
- iDRAC:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/dell.svg
|
||||
href: https://10.0.41.102/
|
||||
description: Dell iDRAC · 10.0.41.102
|
||||
siteMonitor: https://10.0.41.102/
|
||||
color: "#007DB8"
|
||||
- Proxmox:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/proxmox.svg
|
||||
href: https://10.0.10.65:8006/
|
||||
description: pve01 virtualization
|
||||
description: 10.0.10.65:8006
|
||||
siteMonitor: https://10.0.10.65:8006/
|
||||
color: "#E57000"
|
||||
widget:
|
||||
type: proxmox
|
||||
url: https://10.0.10.65:8006
|
||||
username: "root@pam!homepage"
|
||||
password: "8890185b-0850-42b7-bab2-a690ea4dc3f1"
|
||||
node: pve01
|
||||
fields: ["vms", "lxc", "resources.cpu", "resources.mem"]
|
||||
- Forgejo:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/git.svg
|
||||
href: http://atc-mgt01.dell-atc.lan:3001/
|
||||
description: Git — Lakehouse repo
|
||||
description: atc-mgt01.dell-atc.lan:3001
|
||||
siteMonitor: http://atc-mgt01.dell-atc.lan:3001/
|
||||
color: "#F05032"
|
||||
- LDAP Admin:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/ldap.png
|
||||
href: http://atc-mgt01.dell-atc.lan/lam/
|
||||
description: LDAP Account Manager
|
||||
description: atc-mgt01.dell-atc.lan/lam/
|
||||
siteMonitor: http://atc-mgt01.dell-atc.lan/lam/
|
||||
color: "#0984e3"
|
||||
|
||||
- Databases (atc-db01 — 10.0.20.112):
|
||||
- PostgreSQL:
|
||||
- Databases:
|
||||
- PostgreSQL · db01:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/postgresql.svg
|
||||
ping: atc-db01.dell-atc.lan
|
||||
description: |
|
||||
Host: atc-db01.dell-atc.lan
|
||||
Port: 5432
|
||||
URI: postgresql://USER:PASS@atc-db01.dell-atc.lan:5432/DBNAME
|
||||
psql: psql -h atc-db01.dell-atc.lan -U USER -d DBNAME
|
||||
description: atc-db01:5432 · postgresql://USER@atc-db01.dell-atc.lan:5432/DB · psql -h atc-db01
|
||||
color: "#4169E1"
|
||||
- MySQL:
|
||||
- MySQL · db01:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/mysql.svg
|
||||
ping: atc-db01.dell-atc.lan
|
||||
description: |
|
||||
Host: atc-db01.dell-atc.lan
|
||||
Port: 3306
|
||||
URI: mysql://USER:PASS@atc-db01.dell-atc.lan:3306/DBNAME
|
||||
CLI: mysql -h atc-db01.dell-atc.lan -u USER -p
|
||||
description: atc-db01:3306 · mysql://USER@atc-db01.dell-atc.lan:3306/DB · mysql -h atc-db01
|
||||
color: "#4479A1"
|
||||
|
||||
- Databases (atc-db02 — 10.0.21.51):
|
||||
- MongoDB:
|
||||
- MongoDB · db02:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/mongodb.svg
|
||||
ping: atc-db02.dell-atc.lan
|
||||
description: |
|
||||
Host: atc-db02.dell-atc.lan
|
||||
Port: 27017
|
||||
URI: mongodb://USER:PASS@atc-db02.dell-atc.lan:27017/DBNAME
|
||||
CLI: mongosh "mongodb://atc-db02.dell-atc.lan:27017"
|
||||
description: atc-db02:27017 · mongodb://USER@atc-db02.dell-atc.lan:27017/DB · mongosh
|
||||
color: "#47A248"
|
||||
- PostgreSQL:
|
||||
- PostgreSQL · db02:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/postgresql.svg
|
||||
ping: atc-db02.dell-atc.lan
|
||||
description: |
|
||||
Host: atc-db02.dell-atc.lan
|
||||
Port: 5432
|
||||
URI: postgresql://USER:PASS@atc-db02.dell-atc.lan:5432/DBNAME
|
||||
psql: psql -h atc-db02.dell-atc.lan -U USER -d DBNAME
|
||||
description: atc-db02:5432 · postgresql://USER@atc-db02.dell-atc.lan:5432/DB · psql -h atc-db02
|
||||
color: "#336791"
|
||||
- MySQL:
|
||||
- MySQL · db02:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/mysql.svg
|
||||
ping: atc-db02.dell-atc.lan
|
||||
description: |
|
||||
Host: atc-db02.dell-atc.lan
|
||||
Port: 3306
|
||||
URI: mysql://USER:PASS@atc-db02.dell-atc.lan:3306/DBNAME
|
||||
CLI: mysql -h atc-db02.dell-atc.lan -u USER -p
|
||||
description: atc-db02:3306 · mysql://USER@atc-db02.dell-atc.lan:3306/DB · mysql -h atc-db02
|
||||
color: "#00758F"
|
||||
- Cassandra:
|
||||
- Cassandra · db02:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/apachecassandra.svg
|
||||
ping: atc-db02.dell-atc.lan
|
||||
description: |
|
||||
Host: atc-db02.dell-atc.lan
|
||||
Port: 9042
|
||||
cqlsh: cqlsh atc-db02.dell-atc.lan 9042
|
||||
URI: cassandra://atc-db02.dell-atc.lan:9042
|
||||
description: atc-db02:9042 · cqlsh atc-db02.dell-atc.lan 9042 · cassandra://atc-db02:9042
|
||||
color: "#1287B1"
|
||||
- Neo4j:
|
||||
- Neo4j · db02:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/neo4j.svg
|
||||
href: http://atc-db02.dell-atc.lan:7474/
|
||||
description: |
|
||||
Browser: http://atc-db02.dell-atc.lan:7474
|
||||
Bolt: bolt://atc-db02.dell-atc.lan:7687
|
||||
URI: neo4j://atc-db02.dell-atc.lan:7687
|
||||
ping: atc-db02.dell-atc.lan
|
||||
description: HTTP :7474 · bolt://atc-db02:7687 · neo4j://atc-db02.dell-atc.lan:7687
|
||||
siteMonitor: http://atc-db02.dell-atc.lan:7474/
|
||||
color: "#008CC1"
|
||||
|
||||
- Live Feeds:
|
||||
- Hacker News DE:
|
||||
icon: mdi-newspaper-variant-outline
|
||||
href: https://hn.algolia.com/?q=data%20engineering
|
||||
description: Data engineering on HN
|
||||
- Intel · Hacker News:
|
||||
- HN Front Page:
|
||||
icon: mdi-newspaper
|
||||
href: https://news.ycombinator.com/
|
||||
description: Hacker News — front page
|
||||
color: "#E8752A"
|
||||
widget:
|
||||
type: customapi
|
||||
url: https://hn.algolia.com/api/v1/search?query=data+engineering&tags=story&hitsPerPage=8
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/hn-front
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: hits
|
||||
items: items
|
||||
name: title
|
||||
label: points
|
||||
href: url
|
||||
target: url
|
||||
- Hacker News Kafka:
|
||||
icon: mdi-lightning-bolt
|
||||
href: link
|
||||
target: _blank
|
||||
- HN Data Engineering:
|
||||
icon: mdi-database-search
|
||||
href: https://hn.algolia.com/?q=data%20engineering
|
||||
description: Hacker News — data engineering
|
||||
color: "#3b82f6"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/hn-de
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- HN Kafka:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/apachekafka.svg
|
||||
href: https://hn.algolia.com/?q=kafka
|
||||
description: Kafka & streaming
|
||||
description: Hacker News — Kafka & streaming
|
||||
color: "#E02014"
|
||||
widget:
|
||||
type: customapi
|
||||
url: https://hn.algolia.com/api/v1/search?query=apache+kafka&tags=story&hitsPerPage=8
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/hn-kafka
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: hits
|
||||
items: items
|
||||
name: title
|
||||
label: points
|
||||
href: url
|
||||
target: url
|
||||
href: link
|
||||
target: _blank
|
||||
- HN Spark:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/apachespark.svg
|
||||
href: https://hn.algolia.com/?q=apache+spark
|
||||
description: Hacker News — Apache Spark
|
||||
color: "#E25A1C"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/hn-spark
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- Lobsters:
|
||||
icon: mdi-lobster
|
||||
href: https://lobste.rs/
|
||||
description: Computing & infra — curated links
|
||||
color: "#ef4444"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/lobsters
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
|
||||
- Intel · Data Architecture:
|
||||
- Data Eng Weekly:
|
||||
icon: mdi-calendar-week
|
||||
href: https://www.dataengineeringweekly.com/
|
||||
description: Weekly newsletter — pipelines & platforms
|
||||
color: "#22d3ee"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/de-weekly
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- Pragmatic Engineer:
|
||||
icon: mdi-account-tie
|
||||
href: https://blog.pragmaticengineer.com/
|
||||
description: Big tech engineering & architecture
|
||||
color: "#a855f7"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/pragmatic
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- Martin Fowler:
|
||||
icon: mdi-arch
|
||||
href: https://martinfowler.com/
|
||||
description: Software architecture & design
|
||||
color: "#64748b"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/martinfowler
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- InfoQ:
|
||||
icon: mdi-information-outline
|
||||
href: https://www.infoq.com/
|
||||
description: Architecture, data & dev practices
|
||||
color: "#94a3b8"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/infoq
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- ByteByteGo:
|
||||
icon: mdi-school
|
||||
href: https://blog.bytebytego.com/
|
||||
description: System design — scalable architectures
|
||||
color: "#f59e0b"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/bytebytego
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- TLDR Data Eng:
|
||||
icon: mdi-lightning-bolt
|
||||
href: https://tldr.tech/dataengineering/
|
||||
description: Daily data engineering digest
|
||||
color: "#E8752A"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/tldr-de
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
|
||||
|
||||
- Seattle Data Guy:
|
||||
icon: mdi-chart-bar
|
||||
href: https://www.seattledataguy.com/
|
||||
description: Practical data engineering tutorials
|
||||
color: "#0ea5e9"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/seattle-de
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- RedMonk:
|
||||
icon: mdi-chart-line
|
||||
href: https://redmonk.com/
|
||||
description: Developer-focused industry analysis
|
||||
color: "#dc2626"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/redmonk
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
|
||||
- Intel · Platforms & Blogs:
|
||||
- Confluent Blog:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/apachekafka.svg
|
||||
href: https://www.confluent.io/blog/
|
||||
description: Confluent RSS
|
||||
color: "#E02014"
|
||||
description: Kafka & event streaming
|
||||
color: "#007DB8"
|
||||
widget:
|
||||
type: rss
|
||||
url: https://www.confluent.io/blog/rss.xml
|
||||
limit: 8
|
||||
format: rss
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/confluent
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- Databricks Blog:
|
||||
icon: mdi-layers-triple
|
||||
href: https://www.databricks.com/blog
|
||||
description: Lakehouse & Spark platform
|
||||
color: "#fb923c"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/databricks
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- Debezium CDC:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/debezium.png
|
||||
href: https://debezium.io/blog/
|
||||
description: Change data capture patterns
|
||||
color: "#4ECDC4"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/debezium
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- AWS Big Data:
|
||||
icon: mdi-aws
|
||||
href: https://aws.amazon.com/blogs/big-data/
|
||||
description: AWS analytics & data lakes
|
||||
color: "#FF9900"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/aws-bigdata
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- Google Cloud Blog:
|
||||
icon: mdi-google-cloud
|
||||
href: https://cloud.google.com/blog
|
||||
description: GCP data & analytics
|
||||
color: "#4285F4"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/google-cloud
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- Cloudflare Eng:
|
||||
icon: mdi-cloud
|
||||
href: https://blog.cloudflare.com/
|
||||
description: Edge, networking & scale
|
||||
color: "#F38020"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/cloudflare
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- Meta Engineering:
|
||||
icon: mdi-facebook
|
||||
href: https://engineering.fb.com/
|
||||
description: Large-scale infra & data
|
||||
color: "#1877F2"
|
||||
widget:
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/fb-engineering
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
|
||||
- Airflow Blog:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/apacheairflow.svg
|
||||
href: https://airflow.apache.org/blog/
|
||||
description: Apache Airflow news
|
||||
description: Workflow orchestration & DAGs
|
||||
color: "#017CEE"
|
||||
widget:
|
||||
type: rss
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/airflow
|
||||
limit: 8
|
||||
format: rss
|
||||
- KDnuggets:
|
||||
icon: mdi-chart-timeline-variant
|
||||
href: https://www.kdnuggets.com/
|
||||
description: Data science news
|
||||
color: "#f59e0b"
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- Elastic Blog:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/elasticsearch.svg
|
||||
href: https://www.elastic.co/blog/
|
||||
description: Search, observability & security
|
||||
color: "#005571"
|
||||
widget:
|
||||
type: rss
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/kdnuggets
|
||||
limit: 8
|
||||
format: rss
|
||||
- Towards Data Science:
|
||||
icon: mdi-brain
|
||||
href: https://towardsdatascience.com/
|
||||
description: ML & data articles
|
||||
color: "#007DB8"
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/elastic
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
- The New Stack:
|
||||
icon: mdi-newspaper-variant-multiple
|
||||
href: https://thenewstack.io/
|
||||
description: Cloud native & platform engineering
|
||||
color: "#22c55e"
|
||||
widget:
|
||||
type: rss
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/towardsds
|
||||
limit: 8
|
||||
format: rss
|
||||
- Debezium Blog:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/debezium.png
|
||||
href: https://debezium.io/blog/
|
||||
description: CDC & streaming blog
|
||||
color: "#4ECDC4"
|
||||
widget:
|
||||
type: rss
|
||||
url: https://debezium.io/blog.atom
|
||||
limit: 8
|
||||
format: atom
|
||||
type: customapi
|
||||
url: http://atc-docker01.dell-atc.lan:8090/feed/thenewstack
|
||||
refreshInterval: 300000
|
||||
display: dynamic-list
|
||||
mappings:
|
||||
items: items
|
||||
name: title
|
||||
href: link
|
||||
target: _blank
|
||||
|
||||
- News & Resources:
|
||||
- TLDR Data Eng:
|
||||
icon: mdi-rss
|
||||
href: https://tldr.tech/dataengineering/
|
||||
description: Daily DE digest
|
||||
color: "#E8752A"
|
||||
- TLDR AI:
|
||||
icon: mdi-robot
|
||||
href: https://tldr.tech/ai/
|
||||
description: Daily AI digest
|
||||
color: "#ff8c2a"
|
||||
- Dell Newsroom:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/dell.svg
|
||||
href: https://www.dell.com/en-us/dt/corporate/newsroom.htm
|
||||
description: Dell Technologies news
|
||||
- Dell Technologies:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/dell-technologies.svg
|
||||
href: https://www.delltechnologies.com/
|
||||
description: Corporate site & solutions
|
||||
color: "#007DB8"
|
||||
- Dell Blog · Data:
|
||||
icon: mdi-post-outline
|
||||
href: https://www.dell.com/en-us/blog/categories/products-solutions-analytics
|
||||
description: Analytics & data solutions
|
||||
color: "#007DB8"
|
||||
- Apache Spark:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/apachespark.svg
|
||||
href: https://spark.apache.org/docs/latest/
|
||||
description: Spark documentation
|
||||
color: "#E25A1C"
|
||||
- Trino:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/trino.svg
|
||||
href: https://trino.io/docs/current/
|
||||
description: Distributed SQL engine docs
|
||||
color: "#DD00A1"
|
||||
- Apache Iceberg:
|
||||
icon: mdi-snowflake
|
||||
href: https://iceberg.apache.org/docs/latest/
|
||||
description: Open table format for lakes
|
||||
color: "#38bdf8"
|
||||
- Real Python:
|
||||
icon: mdi-language-python
|
||||
href: https://realpython.com/
|
||||
description: Python tutorials
|
||||
description: Python tutorials & patterns
|
||||
color: "#3776AB"
|
||||
- MinIO Docs:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/minio.svg
|
||||
href: https://min.io/docs/minio/linux/index.html
|
||||
description: S3-compatible object storage
|
||||
color: "#C72C48"
|
||||
- TLDR Tech:
|
||||
icon: mdi-lightning-bolt-outline
|
||||
href: https://tldr.tech/
|
||||
description: Daily tech newsletter (web)
|
||||
color: "#E8752A"
|
||||
|
||||
- Docker (atc-docker01):
|
||||
- Docker · atc-docker01:
|
||||
- Homepage:
|
||||
icon: mdi-view-dashboard
|
||||
href: http://atc-docker01.dell-atc.lan/
|
||||
description: This dashboard
|
||||
server: local
|
||||
description: atc-docker01.dell-atc.lan
|
||||
server: my-docker
|
||||
container: homepage
|
||||
color: "#E8752A"
|
||||
- Superset:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/apachesuperset.svg
|
||||
href: http://atc-docker01.dell-atc.lan:8088/
|
||||
description: BI platform
|
||||
server: local
|
||||
description: atc-docker01.dell-atc.lan:8088
|
||||
server: my-docker
|
||||
container: superset
|
||||
color: "#6c5ce7"
|
||||
- Forgejo Local:
|
||||
icon: http://atc-docker01.dell-atc.lan:8080/git.svg
|
||||
href: http://atc-docker01.dell-atc.lan:4002/
|
||||
description: Local Git :4002
|
||||
description: atc-docker01.dell-atc.lan:4002
|
||||
siteMonitor: http://atc-docker01.dell-atc.lan:4002/
|
||||
server: local
|
||||
server: my-docker
|
||||
container: forgejo
|
||||
color: "#F05032"
|
||||
|
||||
@@ -2,33 +2,52 @@
|
||||
title: ATC Lakehouse
|
||||
description: Forward Deployed Engineering — Dell Technologies · Bart & Mo
|
||||
theme: dark
|
||||
color: slate
|
||||
color: zinc
|
||||
iconStyle: gradient
|
||||
headerStyle: underlined
|
||||
useEqualHeights: true
|
||||
statusStyle: dot
|
||||
fullWidth: true
|
||||
target: _blank
|
||||
showStats: true
|
||||
background:
|
||||
opacity: 0
|
||||
brightness: 0
|
||||
saturate: 0
|
||||
layout:
|
||||
Data Pipeline:
|
||||
tab: OPS
|
||||
style: row
|
||||
columns: 5
|
||||
Analytics:
|
||||
tab: OPS
|
||||
style: row
|
||||
columns: 4
|
||||
Infrastructure:
|
||||
tab: OPS
|
||||
style: row
|
||||
columns: 4
|
||||
Databases (atc-db01 — 10.0.20.112):
|
||||
style: row
|
||||
columns: 2
|
||||
Databases (atc-db02 — 10.0.21.51):
|
||||
columns: 5
|
||||
Docker · atc-docker01:
|
||||
tab: OPS
|
||||
style: row
|
||||
columns: 3
|
||||
Live Feeds:
|
||||
Databases:
|
||||
tab: DATA
|
||||
style: row
|
||||
columns: 4
|
||||
Intel · Hacker News:
|
||||
tab: FEEDS
|
||||
style: row
|
||||
columns: 5
|
||||
Intel · Data Architecture:
|
||||
tab: FEEDS
|
||||
style: row
|
||||
columns: 7
|
||||
Intel · Platforms & Blogs:
|
||||
tab: FEEDS
|
||||
style: row
|
||||
columns: 6
|
||||
News & Resources:
|
||||
tab: LINKS
|
||||
style: row
|
||||
columns: 4
|
||||
Docker (atc-docker01):
|
||||
style: row
|
||||
columns: 3
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
href: https://www.delltechnologies.com
|
||||
target: _blank
|
||||
- greeting:
|
||||
text_size: xl
|
||||
text: "Forward Deployed Engineering"
|
||||
subtext: "Bart & Mo · Dell Technologies · ATC Lakehouse"
|
||||
- datetime:
|
||||
text_size: lg
|
||||
text: ATC Lakehouse
|
||||
subtext: "Forward Deployed Engineering · Bart & Mo"
|
||||
- datetime:
|
||||
text_size: md
|
||||
format:
|
||||
timeStyle: short
|
||||
dateStyle: medium
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# ATC Lakehouse dashboard stack (atc-docker01)
|
||||
# Usage: docker compose -f deploy/docker-compose.homepage.yml up -d --build
|
||||
|
||||
services:
|
||||
homepage:
|
||||
image: ghcr.io/gethomepage/homepage:latest
|
||||
container_name: homepage
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:3000"
|
||||
volumes:
|
||||
- ../config/homepage:/app/config
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
environment:
|
||||
HOMEPAGE_ALLOWED_HOSTS: "*"
|
||||
|
||||
rss-proxy:
|
||||
build: ../rss-proxy
|
||||
image: rss-proxy:latest
|
||||
container_name: rss-proxy
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8090:8090"
|
||||
|
||||
icons-server:
|
||||
image: nginx:alpine
|
||||
container_name: icons-server
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8080:80"
|
||||
volumes:
|
||||
- ../config/homepage/icons:/usr/share/nginx/html:ro
|
||||
@@ -0,0 +1,6 @@
|
||||
FROM python:3.12-slim
|
||||
WORKDIR /app
|
||||
RUN pip install --no-cache-dir flask gunicorn feedparser
|
||||
COPY server.py .
|
||||
EXPOSE 8090
|
||||
CMD ["gunicorn", "-b", "0.0.0.0:8090", "-w", "1", "server:app"]
|
||||
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env python3
|
||||
"""RSS proxy for ATC Lakehouse — normalized JSON for homepage widgets."""
|
||||
from flask import Flask, jsonify
|
||||
import feedparser
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
FEEDS = {
|
||||
# Hacker News & community
|
||||
"hn-front": "https://hnrss.org/frontpage",
|
||||
"hn-de": "https://hnrss.org/newest?q=data+engineering",
|
||||
"hn-kafka": "https://hnrss.org/newest?q=kafka",
|
||||
"hn-spark": "https://hnrss.org/newest?q=apache+spark",
|
||||
"hn-lakehouse": "https://hnrss.org/newest?q=lakehouse",
|
||||
"lobsters": "https://lobste.rs/rss",
|
||||
# Data architecture & FDE reading
|
||||
"de-weekly": "https://www.dataengineeringweekly.com/feed",
|
||||
"de-central": "https://dataengineeringcentral.substack.com/feed",
|
||||
"pragmatic": "https://blog.pragmaticengineer.com/rss/",
|
||||
"martinfowler": "https://martinfowler.com/feed.atom",
|
||||
"infoq": "https://www.infoq.com/feed/",
|
||||
"oreilly-radar": "https://feeds.feedburner.com/oreilly/radar/atom",
|
||||
"bytebytego": "https://blog.bytebytego.com/feed",
|
||||
"seattle-de": "https://www.seattledataguy.com/feed/",
|
||||
# Platforms & lakehouse stack
|
||||
"confluent": "https://www.confluent.io/rss.xml",
|
||||
"databricks": "https://www.databricks.com/blog/feed.xml",
|
||||
"airflow": "https://airflow.apache.org/blog/index.xml",
|
||||
"debezium": "https://debezium.io/blog.atom",
|
||||
"elastic": "https://www.elastic.co/blog/feed",
|
||||
"minio": "https://blog.min.io/rss.xml",
|
||||
"aws-bigdata": "https://aws.amazon.com/blogs/big-data/feed/",
|
||||
"google-cloud": "https://cloudblog.withgoogle.com/rss/",
|
||||
"cloudflare": "https://blog.cloudflare.com/rss/",
|
||||
"fb-engineering": "https://engineering.fb.com/feed/",
|
||||
# Newsletters
|
||||
"tldr-de": "https://tldr.tech/rss/dataengineering",
|
||||
"thenewstack": "https://thenewstack.io/feed/",
|
||||
"kdnuggets": "https://www.kdnuggets.com/feed",
|
||||
"towardsds": "https://medium.com/feed/towards-data-science",
|
||||
"redmonk": "https://redmonk.com/feed/",
|
||||
}
|
||||
|
||||
|
||||
@app.get("/health")
|
||||
def health():
|
||||
return jsonify({"status": "ok", "count": len(FEEDS), "feeds": sorted(FEEDS.keys())})
|
||||
|
||||
|
||||
@app.get("/feed/<name>")
|
||||
def feed(name):
|
||||
url = FEEDS.get(name)
|
||||
if not url:
|
||||
return jsonify({"error": f"unknown feed: {name}", "feeds": sorted(FEEDS.keys())}), 404
|
||||
parsed = feedparser.parse(url)
|
||||
items = [
|
||||
{
|
||||
"title": e.get("title", "Untitled"),
|
||||
"link": e.get("link", ""),
|
||||
"published": e.get("published", e.get("updated", "")),
|
||||
}
|
||||
for e in parsed.entries[:10]
|
||||
]
|
||||
return jsonify({"title": parsed.feed.get("title", name), "items": items})
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", port=8090)
|
||||
Reference in New Issue
Block a user