
बस नोड्स और ग्राफ़
अपना इंफ्रास्ट्रक्चर देखें। बिना किसी कॉन्फ़िगरेशन के।
graph-go को अपने स्टैक पर इंगित करें और हर डेटाबेस, टेबल, सेवा, और स्टोरेज बकेट का एक लाइव, इंटरैक्टिव मानचित्र प्राप्त करें — वास्तविक समय की स्वास्थ्य निगरानी के साथ।
graph-go एक CLI-प्रथम इंफ्रास्ट्रक्चर मैपर है। यह डॉकर डेमॉन से कनेक्ट करके, चल रहे कंटेनरों का निरीक्षण करके, और डेटाबेस तथा स्टोरेज सेवाओं की जाँच करके आपके इंफ्रास्ट्रक्चर को स्वचालित रूप से खोजता है। UI बैकएंड द्वारा प्रदान किया जाता है और वास्तविक बैकएंड स्थिति को दर्शाता है — कोई मैन्युअल इन्वेंट्री आवश्यक नहीं है।
| क्षमता | विवरण |
|---|---|
| स्वचालित खोज | डॉकर कंटेनरों और Kubernetes क्लस्टरों से इंफ्रास्ट्रक्चर का पता लगाता है — कोई मैन्युअल इन्वेंट्री आवश्यक नहीं |
| Kubernetes | Namespaces, Deployments, StatefulSets, DaemonSets, Pods, Services — इन्फ़ॉर्मर-आधारित रीयल-टाइम वॉचिंग के साथ |
| Docker | चल रहे कंटेनरों को वर्गीकृत करता है, क्रेडेंशियल्स निकालता है, डॉकर इवेंट्स देखता है, टाइप/DSN/नोड-टाइप/नाम को ओवरराइड करने या कंटेनर को अनदेखा करने के लिए graphgo.* लेबल का सम्मान करता है |
| PostgreSQL | तालिकाएँ, विदेशी कुंजी संबंध, स्कीमा टोपोलॉजी |
| MongoDB | डेटाबेस और कलेक्शन |
| MySQL | तालिकाएँ, विदेशी कुंजी संबंध |
| Redis | कीस्पेस और कुंजी वितरण |
| Elasticsearch | इंडेक्स, क्लस्टर स्वास्थ्य, शार्ड स्थिति |
| S3 / MinIO | बकेट और शीर्ष-स्तरीय प्रीफ़िक्स |
| HTTP सेवाएँ | स्वास्थ्य एंडपॉइंट, सेवाओं के बीच डिपेंडेंसी मैपिंग |
| रीयल-टाइम स्वास्थ्य | WebSocket-संचालित लाइव स्थिति अपडेट हर 5 सेकंड में |
| इंटरैक्टिव ग्राफ़ | स्विमलेन लेआउट, नेमस्पेस ग्रुप कंटेनर, पैन/ज़ूम, टाइप/स्वास्थ्य द्वारा फ़िल्टर, नोड्स खोजें |
graph-go graphgo.* कंटेनर लेबलों के एक छोटे सेट को सम्मान देता है (उन्हें किसी भी कंटेनर पर सेट करें जिसे आप नियंत्रित करना चाहते हैं):
गलत वर्गीकृत कंटेनरों को बचाने, graph-go को कस्टम DSN पर इंगित करने, या बिना हटाए कंटेनर को ग्राफ़ से छिपाने के लिए इनका उपयोग करें।
CLI के साथ सीडेड डेमो स्टैक को बूट करें। यह graph-go को यथार्थवादी वातावरण में देखने का सबसे तेज़ तरीका है और पहली बार उपयोगकर्ताओं के लिए अभिप्रेत ऑनबोर्डिंग पथ है:
git clone https://github.com/guilherme-grimm/graph-go.git
cd graph-go
go run ./cmd/app demo
http://localhost:8080 खोलें। कमांड Docker Compose के माध्यम से अटैच होकर चलता है। अटैच्ड सत्र को रोकने के लिए Ctrl+C दबाएँ।
ठंडी मशीन पर पहली बार चलने में कई मिनट लग सकते हैं क्योंकि Docker को बेस इमेज खींचने और स्थानीय डेमो इमेज बनाने की आवश्यकता हो सकती है। बाद की रन बहुत तेज़ होती हैं।
डेमो स्टैक को इन होस्ट पोर्ट्स के खाली होने की आवश्यकता है: 8080, 5432, 27017, 9000, और 9001।
यदि बाद में स्पष्ट टियरडाउन की आवश्यकता हो:
docker compose -f docker-compose.demo.yml down
एक कंटेनर, एक पोर्ट। डॉकर सॉकेट को केवल-पढ़ने के लिए माउंट करें और graph-go होस्ट पर चल रही हर चीज़ को स्वचालित रूप से खोज लेगा:
docker run -d -p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
ghcr.io/guilherme-grimm/graph-go:latest
graph-go केवल डॉकर सॉकेट से पढ़ता है।
:roफ़्लैग इसे लागू करता है — इसे रखें।
http://localhost:8080 खोलें। स्वचालित खोज डॉकर कंटेनरों और (जब क्यूबकॉन्फ़िग या इन-क्लस्टर सेवा खाता मौजूद हो) Kubernetes संसाधनों को बिना किसी कॉन्फ़िग फ़ाइल के संभालती है।
डॉकर/Kubernetes के बाहर रहने वाली सेवाओं (रिमोट डेटाबेस, प्रबंधित क्लाउड सेवाएँ) के लिए, एक कॉन्फ़िग फ़ाइल माउंट करें — कॉन्फ़िगरेशन देखें।
एकल स्व-निहित बाइनरी — UI एम्बेडेड है, लेकिन एंट्रीपॉइंट अभी भी CLI है।
# Linux amd64 (GitHub CLI की आवश्यकता है; अन्य प्लेटफ़ॉर्म के लिए Releases ब्राउज़ करें)
gh release download --repo guilherme-grimm/graph-go --pattern 'graph-go_*_linux_amd64.tar.gz' --clobber
tar xzf graph-go_*_linux_amd64.tar.gz
./graph-go serve # या सिर्फ `./graph-go` - एक ही बात
http://localhost:8080 खोलें। अन्य प्लेटफ़ॉर्म Releases पेज पर।
वैश्विक फ़्लैग (प्रत्येक उपकमांड पर लागू): --config, --log-level, --log-format। पूर्ण प्रति-कमांड सतह के लिए graph-go <command> --help देखें।
विशिष्ट प्रवाह:
graph-go demo।graph-go serve।graph-go scan।| पोर्ट | उद्देश्य |
|---|---|
8080 | graph-go (UI + API + WebSocket — उत्पादन) |
5173 | Vite डेव सर्वर (केवल विकास — CONTRIBUTING.md देखें) |
9001 |
स्वचालित खोज मार्ग है। डॉकर सॉकेट माउंट करें और/या Kubernetes क्लस्टर के अंदर चलाएँ — graph-go आपके इंफ्रास्ट्रक्चर को बिना किसी कॉन्फ़िग फ़ाइल की आवश्यकता के खोज लेता है।
YAML कॉन्फ़िग (conf/config.yaml) का उपयोग केवल उन सेवाओं के लिए एस्केप हैच के रूप में करें जो खोज के माध्यम से पहुँच योग्य नहीं हैं — रिमोट डेटाबेस, प्रबंधित क्लाउड सेवाएँ, बाहरी एंडपॉइंट। पूर्ण स्कीमा के लिए conf/config.sample.yaml देखें — प्रत्येक अडैप्टर और प्रत्येक कॉन्फ़िग ब्लॉक (server, docker, kubernetes, connections) के उदाहरण।
ऊपर दिए गए Docker रन के साथ कॉन्फ़िग फ़ाइल का उपयोग करने के लिए:
docker run -d -p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v $(pwd)/conf/config.yaml:/app/conf/config.yaml:ro \
ghcr.io/guilherme-grimm/graph-go:latest
केवल अधिकृत उपयोग: graph-go उस इंफ्रास्ट्रक्चर को विज़ुअलाइज़ करने के लिए है जिसके आप मालिक हैं या जिसे एक्सेस करने की अनुमति है। इसे अनधिकृत सिस्टम पर इंगित न करें।
┌─────────────────────────────────────┐
│ Discoverer Interface │
│ Discover() · Watch() · Close() │
└──────────┬──────────┬───────────────┘
│ │
┌──────────▼──┐ ┌────▼──────────────┐
│ Docker │ │ Kubernetes │
│ Discoverer │ │ Discoverer │
│ (containers,│ │ (informers, pods, │
│ classify, │ │ deployments, │
│ events) │ │ services, health) │
└──────┬──────┘ └────┬──────────────┘
│ │
┌──────▼───────────────▼──────┐
│ Parallel Discovery + Merge │
│ (concatenate ServiceInfo) │
└──────────────┬──────────────┘
│
Config (YAML) ──→ YAML Merge ───────────▶│
▼
┌─────────────────────────────┐
│ Adapter Registry │
│ ├─ PostgreSQL → Tables + FK│
│ ├─ MongoDB → Collections │
│ ├─ MySQL → Tables + FK │
│ ├─ Redis → Keyspaces │
│ ├─ Elasticsearch → Indices │
│ ├─ S3 → Buckets │
│ └─ HTTP → Health + deps│
│ │
│ + Topology (K8s nodes/edges) │
└──────────────┬───────────────┘
▼
Graph Model (Nodes + Edges)
▼
REST API + WebSocket (Real-time)
मुख्य घटक:
Discover, Watch, Close) — Docker और Kubernetes समानांतर में चलते हैं, परिणाम जोड़े जाते हैंAdapter इंटरफ़ेस लागू करते हैंAdapter-d्वारा खोजे गए:
Service Node (postgres/mongodb/s3)
└─ Database/Bucket Node
└─ Table/Collection/Prefix Node
Kubernetes-d्वारा खोजे गए:
Namespace (group container)
└─ Deployment / StatefulSet / DaemonSet
└─ Pod
└─ K8sService ──routes_to──→ Pod
किनारे संबंधों का प्रतिनिधित्व करते हैं (contains, foreign_key, routes_to, आदि)।
बैकएंड:
फ्रंटएंड:
इंफ्रास्ट्रक्चर:
go test ./...
Docker के बिना चलता है। शुद्ध फ़ंक्शन परीक्षण और HTTP हैंडलर परीक्षण शामिल हैं।
go test -tags=integration -v -timeout=5m ./internal/adapters/...
Docker की आवश्यकता है। वास्तविक डेटाबेस इंस्टेंस (PostgreSQL, MongoDB, MySQL, Redis, Elasticsearch, MinIO) को स्पिन करने के लिए testcontainers-go का उपयोग करता है — कोई मॉक नहीं।
हर अडैप्टर अनुबंध परीक्षण सूट (adaptertest.RunContractTests) के माध्यम से चलता है जो मान्य करता है:
एकल अडैप्टर के परीक्षण चलाएँ:
go test -tags=integration -v ./internal/adapters/redis/
make test # यूनिट + प्रकार-जाँच
go test -tags=integration -timeout=5m ./internal/adapters/... # एकीकरण
/api/graphपूरा इंफ्रास्ट्रक्चर ग्राफ़ (नोड्स + किनारे) लौटाता है।
प्रतिक्रिया:
{
"data": {
"nodes": [
{
"id": "service-postgres",
"type": "postgres",
"name": "postgres",
"metadata": { "adapter": "postgres" },
"health": "healthy"
}
],
"edges": [
{
"id": "edge-1",
"source": "service-postgres",
"target": "pg-mydb",
"type": "contains",
"label": "contains"
}
]
}
}
/api/node/{id}किसी विशिष्ट नोड का विवरण लौटाता है।
/api/healthअडैप्टर स्वास्थ्य स्थिति (ok/degraded/error) लौटाता है।
/websocketरीयल-टाइम अपडेट स्ट्रीम करता है। दो संदेश प्रकार उत्सर्जित होते हैं, दोनों { "type": "...", "payload": { ... } } के रूप में लपेटे जाते हैं। कोई timestamp फ़ील्ड नहीं है — क्लाइंट आगमन द्वारा क्रम निर्धारित करते हैं।
health_update — प्रति स्वीप (हर 5 सेकंड) एक बार प्रत्येक नोड के लिए भेजा जाता है। अडैप्टर-स्वामित्व वाले नोड अडैप्टर लुकअप के माध्यम से स्वास्थ्य प्राप्त करते हैं; टोपोलॉजी नोड (जैसे Kubernetes संसाधन) सीधे नोड पर स्वास्थ्य रखते हैं।
{
"type": "health_update",
"payload": {
"nodeId": "service-postgres",
"health": "healthy"
}
}
health इनमें से एक है: healthy, degraded, unhealthy।
graph_update — तब भेजा जाता है जब नोड IDs का सेट बदलता है (खोज द्वारा एक नोड जोड़ा या हटाया गया)। payload खाली है; क्लाइंट को /api/graph को फिर से लाना चाहिए।
{
"type": "graph_update",
"payload": {}
}
internal/adapters/{name}/ मेंAdapter इंटरफ़ेस लागू करें:
type Adapter interface {
Connect(config ConnectionConfig) error
Discover() ([]nodes.Node, []edges.Edge, error)
Health() (HealthMetrics, error)
Close() error
}
init() के माध्यम से adapters.RegisterFactory("name", ...) के साथ{name}_integration_test.go बनाएँ जिसमें:
//go:build integrationTestMainadaptertest.RunContractTests कॉल करेंinternal/server/server.go में ( के लिए खाली आयात)डिस्कवरर internal/discovery/{name}/ में रहते हैं और Discoverer इंटरफ़ेस लागू करते हैं:
type Discoverer interface {
Name() string
Discover(ctx context.Context) ([]ServiceInfo, error)
Watch(ctx context.Context, onChange func()) error
Close() error
}
internal/discovery/{name}/ मेंDiscoverer इंटरफ़ेस लागू करें — Discover() से []ServiceInfo लौटाएँ। टोपोलॉजी उत्पन्न करने वाले डिस्कवरर (जैसे K8s) सीधे Nodes/Edges भरते हैं; अडैप्टर-उन्मुख (जैसे Docker) अडैप्टर ब्रिजिंग के लिए Config भरते हैं।internal/server/server.go में — build{Name}Discovery() फ़ंक्शन जोड़ें और इसे मौजूदा डिस्कवरर के साथ कॉल करें।//go:build integration के साथ — वास्तविक इंफ्रास्ट्रक्चर (K8s के लिए kind/k3d, अन्य के लिए testcontainers) का उपयोग करें। कोई मॉक नहीं।विस्तृत मार्गदर्शन के लिए CONTRIBUTING.md देखें।
हम योगदान का स्वागत करते हैं! दिशानिर्देशों के लिए CONTRIBUTING.md देखें:
इच्छित उपयोग:
इसके लिए अभिप्रेत नहीं:
उपयोगकर्ता यह सुनिश्चित करने के लिए जिम्मेदार हैं कि graph-go को किसी भी इंफ्रास्ट्रक्चर से जोड़ने से पहले उनके पास उचित प्राधिकरण हो।
यह प्रोजेक्ट GNU Affero General Public License v3.0 (AGPL-3.0) के तहत लाइसेंस प्राप्त है।
विवरण के लिए LICENSE फ़ाइल देखें। AGPL की आवश्यकता है कि नेटवर्क पर उपयोग किए जाने वाले संशोधित संस्करण भी ओपन-सोर्स होने चाहिए।
प्रोजेक्ट निरंतर एकीकरण और स्वचालित रिलीज़ के लिए GitHub Actions का उपयोग करता है।
main पर प्रत्येक पुश/PR पर चलता है — बैकएंड यूनिट टेस्ट, एकीकरण परीक्षण (testcontainers), और फ्रंटएंड बिल्डv*) द्वारा ट्रिगर होती हैं और उत्पादन करती हैं:
ghcr.io/guilherme-grimm/graph-go पर पुश की गई एकल Docker इमेजरिलीज़ बनाने के लिए:
git tag v0.1.0
git push --tags
DevOps और इंफ्रास्ट्रक्चर इंजीनियरों के लिए ❤️ से बनाया गया
| लेबल | प्रभाव |
|---|
graphgo.ignore=true | इस कंटेनर को पूरी तरह से छोड़ दें |
graphgo.type=postgres | अडैप्टर प्रकार बलपूर्वक सेट करें (postgres, mongodb, mysql, redis, elasticsearch, s3, http) |
graphgo.dsn=... | एक कनेक्शन स्ट्रिंग इंजेक्ट करें (postgres/mysql के लिए DSN, mongodb के लिए URI, अन्यथा dsn पर वापस जाएँ) |
graphgo.node-type=gateway | दृश्य नोड प्रकार ओवरराइड करें (service, gateway, auth, api, queue, cache) |
graphgo.name=... | ग्राफ़ में दिखाए गए नोड नाम को ओवरराइड करें और नोड IDs/लॉग में उपयोग किया जाए |
| कमांड | यह क्या करता है |
|---|
graph-go demo | रिपॉजिटरी से सीडेड Docker Compose डेमो स्टैक को बूट करें और इसका आउटपुट अग्रभूमि में स्ट्रीम करें। |
graph-go serve | स्वचालित खोज और लाइव अपडेट के साथ HTTP सर्वर शुरू करें (डिफ़ॉल्ट - बिना आर्ग्युमेंट के चलाने के समान)। |
graph-go scan | एक बार खोज चलाएँ और ग्राफ़ को stdout पर JSON के रूप में आउटपुट करें। jq में पाइप करने, CI जाँच, या एक-बार निर्यात के लिए उपयोगी। |
graph-go version | संस्करण, कमिट, और बिल्ड तिथि प्रिंट करें। |
graph-go --health-check | स्थानीय /health पर हिट करें और 0/1 के साथ बाहर निकलें। कंटेनर HEALTHCHECK द्वारा उपयोग किया जाता है; इंटरैक्टिव उपयोग के लिए नहीं। |
| MinIO कंसोल (केवल डेमो स्टैक) |
init()internal/graph/nodes/nodes.go मेंwebui/src/types/graph.ts मेंwebui/src/components/graph/CustomNode.tsx में