45 lines
2.6 KiB
Python
45 lines
2.6 KiB
Python
"""Architecture diagram, revealed in four chunks aligned to intro beats i1..i4."""
|
|
C = "\033[36m"; B = "\033[1m"; D = "\033[2m"; G = "\033[32m"; Y = "\033[33m"; R = "\033[0m"
|
|
|
|
CHUNKS = [
|
|
[
|
|
f" {B}{C}┌────────────────────────────────┐{R}",
|
|
f" {B}{C}│{R} Developer / process owner {B}{C}│{R} {D}\"change this config\"{R}",
|
|
f" {B}{C}└───────────────┬────────────────┘{R}",
|
|
f" {B}{C} │{R}",
|
|
f" {B}{C} ▼{R}",
|
|
f" {B}{C}┌────────────────────────────────┐{R}",
|
|
f" {B}{C}│{R} Business application on a VM {B}{C}│{R}",
|
|
f" {B}{C}└───────────────┬────────────────┘{R}",
|
|
],
|
|
[
|
|
f" {D} │ protected by{R}",
|
|
f" {D} ▼{R}",
|
|
f" {B}{G}┌────────────────────────────────┐{R} {D}┌───────────────────────────┐{R}",
|
|
f" {B}{G}│{R} Zerto continuous protection {B}{G}│{R} vs {D}│ Nightly backup │{R}",
|
|
f" {B}{G}│{R} {G}recovery point every few secs{R} {B}{G}│{R} {D}│ recovery point: hours old │{R}",
|
|
f" {B}{G}└────────────────────────────────┘{R} {D}└───────────────────────────┘{R}",
|
|
],
|
|
[
|
|
"",
|
|
f" {B}{Y}┌────────────────────────────────┐{R}",
|
|
f" {B}{Y}│{R} AI agent {B}{Y}│{R} 1. ask Zerto: is this protected?",
|
|
f" {B}{Y}│{R} authorised to make the change {B}{Y}│{R} 2. tag a checkpoint in the journal",
|
|
f" {B}{Y}└────────────────────────────────┘{R} 3. make the change, and test it",
|
|
],
|
|
[
|
|
"",
|
|
f" 4. {B}broken, and the agent cannot fix it{R}",
|
|
f" recover the file, or the whole VM,",
|
|
f" {G}from the checkpoint taken at step 2{R}",
|
|
],
|
|
]
|
|
|
|
|
|
def frame(upto: int) -> str:
|
|
"""Everything revealed through chunk `upto` (1-based)."""
|
|
out = ["\033[H\033[2J", f" {B}{C}ZERTO AI REWIND{R} {D}how it fits together{R}", ""]
|
|
for chunk in CHUNKS[:upto]:
|
|
out.extend(chunk)
|
|
return "\n".join(out)
|