update diagram

This commit is contained in:
Arlan Lloyd 2024-06-19 21:47:58 +00:00 committed by Zoe Roux
parent 2b144174a8
commit 085f2c27a0

View File

@ -6,17 +6,19 @@ C4 stands for Context, Container, Component, Code.
C4Context C4Context
title Context diagram for Kyoo System title Context diagram for Kyoo System
Person(userA, "User A") Person(user, "User")
System(systemA, "Kyoo", "Self-hosted media server focused on video content.") System(kyoo, "Kyoo", "Self-hosted media server focused on video content.")
System_Ext(systemC, "MediaLibrary", "External Media Source") System_Ext(media, "MediaLibrary", "")
System_Ext(systemB, "ContentDatabase", "External Content Database") System_Ext(content, "ContentDatabase", "Media Info. Artwork, etc.")
System_Ext(tracker, "ActivityTracker", "")
Rel(userA, systemA, "watches") Rel(user, kyoo, "watches")
Rel(systemA, systemB, "fetches metadata, title screen, backgrounds, etc") Rel(kyoo, content, "fetches metadata, title screen, backgrounds, etc")
Rel(systemA, systemC, "media content source") Rel(kyoo, media, "media content source")
Rel(kyoo, tracker, "update tracking")
UpdateLayoutConfig($c4ShapeInRow="2", $c4BoundaryInRow="1") UpdateLayoutConfig($c4ShapeInRow="2", $c4BoundaryInRow="1")
``` ```
@ -32,22 +34,24 @@ C4 stands for Context, Container, Component, Code.
Container(backend, "backend") Container(backend, "backend")
Container(scanner, "scanner") Container(scanner, "scanner")
Container(autosync, "autosync") Container(autosync, "autosync")
Container(shareq, "sharequeue") Container(sharem, "sharemessage")
Container(transcoder, "transcoder") Container(transcoder, "transcoder")
} }
System_Ext(media, "MediaLibrary", "External Media Source") System_Ext(media, "MediaLibrary", "")
System_Ext(content, "ContentDatabase", "External Content Database") System_Ext(content, "ContentDatabase", "")
System_Ext(tracker, "ActivityTracker", "")
Rel(user, frontend, "/") Rel(user, frontend, "/")
Rel(user, backend, "/api") Rel(user, backend, "/api")
Rel(frontend, backend, "") Rel(frontend, backend, "")
Rel(backend, shareq, "") Rel(backend, sharem, "")
Rel(backend, media, "") Rel(backend, media, "")
Rel(backend, transcoder, "") Rel(backend, transcoder, "")
Rel(autosync, shareq, "") Rel(autosync, sharem, "")
Rel(autosync, media, "") Rel(autosync, media, "")
Rel(scanner, shareq, "") Rel(autosync, tracker, "")
Rel(scanner, sharem, "")
Rel(scanner, media, "") Rel(scanner, media, "")
Rel(scanner, content, "") Rel(scanner, content, "")
Rel(transcoder, media, "") Rel(transcoder, media, "")
@ -83,19 +87,21 @@ Ideally this would be per component drill down, instead of global
Component(frontend_c1, "kyoo_front", "typescript, node.js", "Static Content") Component(frontend_c1, "kyoo_front", "typescript, node.js", "Static Content")
} }
Container_Boundary(shareq, "sharequeue") { Container_Boundary(sharem, "sharemessage") {
ComponentQueue(shareq_q1, "autosync", "RabbitMQ", "NEEDS DESCRIPTION. i.e dead letter queue") ComponentQueue(sharem_e1, "events.watched", "RabbitMQ, Exchange", "")
ComponentQueue(shareq_q2, "scanner", "RabbitMQ", "NEEDS DESCRIPTION. i.e dead letter queue") ComponentQueue(sharem_e2, "events.resource", "RabbitMQ, Exchange", "")
ComponentQueue(shareq_q3, "scanner.rescan", "RabbitMQ", "NEEDS DESCRIPTION. i.e dead letter queue") ComponentQueue(sharem_q1, "autosync", "RabbitMQ, Queue", "")
ComponentQueue(sharem_q2, "scanner.rescan", "RabbitMQ, Queue", "")
} }
Container_Boundary(autosync, "autosync") { Container_Boundary(autosync, "autosync") {
Component(autosync_c1, "kyoo_autosync", "python, python3.12", "no clue") Component(autosync_c1, "kyoo_autosync", "python, python3.12", "")
} }
Container_Boundary(scanner, "scanner") { Container_Boundary(scanner, "scanner") {
Component(scanner_c2, "kyoo_scanner", "python, python3.12", "matcher. no clue") Component(scanner_c2, "kyoo_scanner", "python, python3.12", "matcher. no clue")
Component(scanner_c1, "kyoo_scanner", "python, python3.12", "no clue") Component(scanner_c1, "kyoo_scanner", "python, python3.12", "no clue")
ComponentQueue(scanner_q1, "scanner", "RabbitMQ", "")
} }
Container_Boundary(transcoder, "transcoder") { Container_Boundary(transcoder, "transcoder") {
@ -112,26 +118,38 @@ Ideally this would be per component drill down, instead of global
} }
Container_Boundary(content, "ContentDatabase") { Container_Boundary(content, "ContentDatabase") {
Component_Ext(content_c1, "tmdb/tvdb", "Rest API", "Content Provider") Component_Ext(content_c1, "ContentProvider", "API", "tmdb or tvdb")
} }
Rel(user, frontend_c1, "/") Container_Boundary(tracker, "ActivityTracker") {
Rel(user, backend_c2, "/api") Component_Ext(tracker_c1, "TrackerProvider", "API", "simkl")
}
Rel(user, frontend_c1, "")
Rel(user, backend_c2, "")
Rel(backend_c1, backend_db1, "Managed schema") Rel(backend_c1, backend_db1, "Managed schema")
Rel(backend_c2, backend_db1, "") Rel(backend_c2, backend_db1, "")
Rel(backend_c2, backend_db2, "") Rel(backend_c2, backend_db2, "")
Rel(backend_c2, sharem_q2, "produces")
Rel(backend_c2, sharem_e1, "produces")
Rel(backend_c2, sharem_e2, "produces")
Rel(backend_c2, backend_c3, "") Rel(backend_c2, backend_c3, "")
Rel(backend_c2, media_c1, "") Rel(backend_c2, media_c1, "")
Rel(backend_c2, transcoder_c1, "") Rel(backend_c2, transcoder_c1, "")
Rel(autosync_c1, media_c1, "") Rel(autosync_c1, media_c1, "")
Rel(autosync_c1, tracker_c1, "")
Rel(autosync_c1, sharem_q1, "consumes")
Rel(frontend_c1, backend_c2, "Frontend->Backend. Why?") Rel(frontend_c1, backend_c2, "")
Rel(scanner_c1, content_c1, "Fetch media metadata") Rel(scanner_c1, content_c1, "Fetch media metadata")
Rel(scanner_c1, scanner_q1, "consumes")
Rel(scanner_c2, content_c1, "Fetch media metadata") Rel(scanner_c2, content_c1, "Fetch media metadata")
Rel(scanner_c2, backend_c2, "Pushes media metadata") Rel(scanner_c2, backend_c2, "Pushes media metadata")
Rel(scanner_c2, scanner_q1, "produces")
Rel(scanner_c2, sharem_q2, "consumes")
Rel(scanner_c1, media_c1, "") Rel(scanner_c1, media_c1, "")
Rel(scanner_c2, media_c1, "") Rel(scanner_c2, media_c1, "")
@ -139,6 +157,8 @@ Ideally this would be per component drill down, instead of global
Rel(transcoder_c1, transcoder_c2, "") Rel(transcoder_c1, transcoder_c2, "")
Rel(transcoder_c1, transcoder_c3, "") Rel(transcoder_c1, transcoder_c3, "")
Rel(sharem_e1, sharem_q1, "bound")
BiRel(backend_c2, scanner_c1, "Request/Push media metadata") BiRel(backend_c2, scanner_c1, "Request/Push media metadata")
``` ```