From de07752466ba549ea0d0a79001a272c30a6f9b2e Mon Sep 17 00:00:00 2001 From: Alex Wellnitz Date: Tue, 11 Feb 2025 12:07:24 +0100 Subject: [PATCH] feat: initial commit --- README.md | 45 +++++++++++++++++++++++++++++++++++- cmd/root.go | 24 +++++++++++++++++++ cmd/version.go | 20 ++++++++++++++++ go.mod | 10 ++++++++ go.sum | 10 ++++++++ internal/http/server.go | 1 + internal/map_node/api.go | 1 + internal/preprocessor/api.go | 1 + internal/reduce_node/api.go | 1 + main.go | 9 ++++++++ 10 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 cmd/root.go create mode 100644 cmd/version.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 internal/http/server.go create mode 100644 internal/map_node/api.go create mode 100644 internal/preprocessor/api.go create mode 100644 internal/reduce_node/api.go create mode 100644 main.go diff --git a/README.md b/README.md index 5dcc3cb..9862059 100644 --- a/README.md +++ b/README.md @@ -1 +1,44 @@ -# flotte \ No newline at end of file +# flotte + +**Erläuterung der Zeichnung:** + +* **Start: Input Video (A):** Der Prozess beginnt mit dem Eingabevideo, das transkodiert werden soll. +* **Video Segmentierung (B):** Das Eingabevideo wird in mehrere Segmente aufgeteilt. Dies ermöglicht die parallele Verarbeitung durch die Map-Nodes. +* **Segment 1, Segment 2, Segment N (C, D, E):** Repräsentieren die einzelnen Video-Segmente, die erzeugt wurden. +* **Map Node 1, Map Node 2, Map Node N: Map Task (F1, F2, FN):** Stellen die verschiedenen Knoten im MapReduce-Cluster dar, die die Map-Aufgaben ausführen. Jeder Knoten erhält ein oder mehrere Video-Segmente zur Verarbeitung. +* **Dekodierung (G1, G2, GN):** Innerhalb jedes Map-Nodes wird das zugewiesene Video-Segment zunächst dekodiert. +* **Transkodierung (H1, H2, HN):** Nach der Dekodierung erfolgt die eigentliche Transkodierung des Segments in das gewünschte Zielformat. +* **Transkodiertes Segment 1, Transkodiertes Segment 2, Transkodiertes Segment N (I1, I2, IN):** Die Ergebnisse der Map-Phase. Jeder Map-Node gibt ein transkodiertes Video-Segment aus. +* **Reduce Node: Reduce Task (J):** Ein zentraler Knoten, der die Reduce-Aufgabe übernimmt. Er sammelt die transkodierten Segmente von den Map-Nodes. +* **Segment Aggregation (K):** Der Reduce-Node führt die transkodierten Segmente in der korrekten Reihenfolge zusammen. +* **Finale Video Enkodierung (L):** Nach der Aggregation kann eine finale Enkodierung des gesamten Videos erfolgen, falls notwendig. +* **Ende: Transkodiertes Video (M):** Der Prozess endet mit der Ausgabe des vollständig transkodierten Videos. + +**Mermaid Code:** + +```mermaid +graph LR + A[Start: Input Video] --> B{Video Segmentierung}; + B --> C(Segment 1); + B --> D(Segment 2); + B --> E(Segment N); + C --> F1[Map Node 1: Map Task]; + D --> F2[Map Node 2: Map Task]; + E --> FN[Map Node N: Map Task]; + F1 --> G1{Dekodierung}; + F2 --> G2{Dekodierung}; + FN --> GN{Dekodierung}; + G1 --> H1{Transkodierung}; + G2 --> H2{Transkodierung}; + GN --> HN{Transkodierung}; + H1 --> I1[Transkodiertes Segment 1]; + H2 --> I2[Transkodiertes Segment 2]; + HN --> IN[Transkodiertes Segment N]; + I1 & I2 & IN --> J[Reduce Node: Reduce Task]; + J --> K{Segment Aggregation}; + K --> L{Finale Video Enkodierung}; + L --> M[Ende: Transkodiertes Video]; + + style F1,F2,FN fill:#f9f,stroke:#333,stroke-width:2px + style J fill:#ccf,stroke:#333,stroke-width:2px +``` diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000..91d0926 --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,24 @@ +package cmd + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" +) + +var rootCmd = &cobra.Command{ + Use: "flotte", + Short: "Short", + Long: `Long`, + Run: func(cmd *cobra.Command, args []string) { + cmd.Help() + }, +} + +func Execute() { + if err := rootCmd.Execute(); err != nil { + fmt.Println(err) + os.Exit(1) + } +} diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 0000000..dfe0686 --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,20 @@ +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +func init() { + rootCmd.AddCommand(versionCmd) +} + +var versionCmd = &cobra.Command{ + Use: "version", + Short: "Print the version number of flotte", + Long: `All software has versions. This is flotte's`, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("flotte v0.9 -- HEAD") + }, +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..fcd4f96 --- /dev/null +++ b/go.mod @@ -0,0 +1,10 @@ +module github.com/alexohneander/flotte + +go 1.23.5 + +require github.com/spf13/cobra v1.8.1 + +require ( + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..912390a --- /dev/null +++ b/go.sum @@ -0,0 +1,10 @@ +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/http/server.go b/internal/http/server.go new file mode 100644 index 0000000..d02cfda --- /dev/null +++ b/internal/http/server.go @@ -0,0 +1 @@ +package http diff --git a/internal/map_node/api.go b/internal/map_node/api.go new file mode 100644 index 0000000..345f29f --- /dev/null +++ b/internal/map_node/api.go @@ -0,0 +1 @@ +package mapnode diff --git a/internal/preprocessor/api.go b/internal/preprocessor/api.go new file mode 100644 index 0000000..57fcb93 --- /dev/null +++ b/internal/preprocessor/api.go @@ -0,0 +1 @@ +package preprocessor diff --git a/internal/reduce_node/api.go b/internal/reduce_node/api.go new file mode 100644 index 0000000..4d01b1d --- /dev/null +++ b/internal/reduce_node/api.go @@ -0,0 +1 @@ +package reducenode diff --git a/main.go b/main.go new file mode 100644 index 0000000..2a2f255 --- /dev/null +++ b/main.go @@ -0,0 +1,9 @@ +package main + +import ( + "github.com/alexohneander/flotte/cmd" +) + +func main() { + cmd.Execute() +}