Files
datatrace/docs/generate_pq_tool_flowcharts.ps1

259 lines
23 KiB
PowerShell
Raw Permalink Normal View History

<EFBFBD><EFBFBD>$ErrorActionPreference = "Stop"
function Set-CellFormula {
param($Shape, [string]$CellName, [string]$Formula)
try {
$Shape.CellsU($CellName).FormulaU = $Formula
} catch {
}
}
function Set-Page {
param($Page, [string]$Name)
$Page.Name = $Name
$Page.NameU = $Name
Set-CellFormula $Page.PageSheet "PageWidth" "13 in"
Set-CellFormula $Page.PageSheet "PageHeight" "8.5 in"
}
function Add-TextBox {
param($Page, [string]$Text, [double]$X, [double]$Y, [double]$W, [double]$H, [int]$Size = 9, [string]$Color = "RGB(0,0,0)")
$s = $Page.DrawRectangle($X - $W / 2, $Y - $H / 2, $X + $W / 2, $Y + $H / 2)
$s.Text = $Text
Set-CellFormula $s "LinePattern" "0"
Set-CellFormula $s "FillPattern" "0"
Set-CellFormula $s "Char.Size" "$Size pt"
Set-CellFormula $s "Char.Color" $Color
Set-CellFormula $s "Para.HorzAlign" "1"
Set-CellFormula $s "VerticalAlign" "1"
return $s
}
function Add-Node {
param(
$Page,
[string]$Text,
[double]$X,
[double]$Y,
[double]$W = 2.35,
[double]$H = 0.62,
[string]$Fill = "RGB(221,235,247)",
[string]$Line = "RGB(91,155,213)"
)
$s = $Page.DrawRectangle($X - $W / 2, $Y - $H / 2, $X + $W / 2, $Y + $H / 2)
$s.Text = $Text
Set-CellFormula $s "FillForegnd" $Fill
Set-CellFormula $s "LineColor" $Line
Set-CellFormula $s "LineWeight" "1.25 pt"
Set-CellFormula $s "Char.Size" "8.5 pt"
Set-CellFormula $s "Para.HorzAlign" "1"
Set-CellFormula $s "VerticalAlign" "1"
return $s
}
function Add-Arrow {
param($Page, [double]$X1, [double]$Y1, [double]$X2, [double]$Y2, [string]$Label = "")
$l = $Page.DrawLine($X1, $Y1, $X2, $Y2)
Set-CellFormula $l "LineColor" "RGB(89,89,89)"
Set-CellFormula $l "LineWeight" "1.1 pt"
Set-CellFormula $l "EndArrow" "4"
if ($Label -ne "") {
Add-TextBox $Page $Label (($X1 + $X2) / 2) (($Y1 + $Y2) / 2 + 0.16) 1.35 0.26 7 "RGB(89,89,89)" | Out-Null
}
return $l
}
function Add-Edge {
param($Page, $From, $To, [string]$Label = "")
$x1 = $From.CellsU("PinX").ResultIU
$y1 = $From.CellsU("PinY").ResultIU - $From.CellsU("Height").ResultIU / 2
$x2 = $To.CellsU("PinX").ResultIU
$y2 = $To.CellsU("PinY").ResultIU + $To.CellsU("Height").ResultIU / 2
Add-Arrow $Page $x1 $y1 $x2 $y2 $Label | Out-Null
}
function Add-Legend {
param($Page)
Add-TextBox $Page "<00><>r<EFBFBD><72><EFBFBD>f<1A>݄=<00><>eQ/M<>n <0C><>~=Yt <0C>Ğ=$R<EFBFBD>e/l<>bc <0C><>~=_8^/\Q<>^ <0C>+}=<00><><EFBFBD>Q" 6.5 0.35 10.5 0.35 8 "RGB(89,89,89)" | Out-Null
}
function New-Page {
param($Doc, [int]$Index, [string]$Name)
if ($Index -eq 1) {
$page = $Doc.Pages.Item(1)
} else {
$page = $Doc.Pages.Add()
}
Set-Page $page $Name
Add-TextBox $page $Name 6.5 8.1 8.8 0.45 16 "RGB(31,78,121)" | Out-Null
Add-Legend $page
return $page
}
function Build-MainFlow {
param($Doc)
$p = New-Page $Doc 1 ";NAm z"
$n = @{}
$n.start = Add-Node $p "/T<>R pq_tool.exe" 6.5 7.25 2.2 0.58 "RGB(226,239,218)" "RGB(112,173,71)"
$n.arg = Add-Node $p "$R<EFBFBD>e}T<>NL<4E><4C>Spe" 6.5 6.35 2.3 0.58 "RGB(255,242,204)" "RGB(191,143,0)"
$n.gui = Add-Node $p "<00>e<EFBFBD>Spe<1A>ۏeQ Win32 GUI`nrunPqGuiApp()" 3.0 5.35 2.65 0.72
$n.cli = Add-Node $p " g<>Spe<1A>}T<>NL<4E>㉐g`nXML + jsondata + origin" 10.0 5.35 2.8 0.72
$n.ledger = Add-Node $p "<00><><EFBFBD>S<EFBFBD>S&<26><>T ICD/XML`npqFetchLedgerAndIcd()" 3.0 4.25 2.9 0.72 "RGB(221,235,247)" "RGB(91,155,213)"
$n.trace = Add-Node $p " <09><>bKm<4B>pv^penc<6E><63>*<2A>`n<00>S<01> set_log <00>mo`" 3.0 3.15 2.9 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.mq = Add-Node $p "MQ <00>V<03>=<3D><>v`njsondata_*.txt / origin_*.txt" 6.5 2.25 3.0 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.parse = Add-Node $p "pqRunParser()`nub final_sorted.xls" 6.5 1.28 2.7 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.preview = Add-Node $p "h<><h<><68>ȉ0[{ <09>0<><7F>`n<00>_<EFBFBD><5F><EFBFBD>e<06>Tub XML" 10.0 1.28 2.9 0.72 "RGB(234,209,220)" "RGB(166,77,121)"
Add-Edge $p $n.start $n.arg
Add-Edge $p $n.arg $n.gui "<00>e<EFBFBD>Spe"
Add-Edge $p $n.arg $n.cli " g<>Spe"
Add-Edge $p $n.gui $n.ledger
Add-Edge $p $n.ledger $n.trace
Add-Arrow $p 4.45 3.15 5.05 2.45 "" | Out-Null
Add-Edge $p $n.trace $n.mq
Add-Edge $p $n.mq $n.parse
Add-Arrow $p 10.0 4.99 7.2 1.65 "<00>v<EFBFBD>c㉐g" | Out-Null
Add-Edge $p $n.parse $n.preview
}
function Build-UiFlow {
param($Doc)
$p = New-Page $Doc 2 "u<>b<EFBFBD><62>N<EFBFBD>NAm z"
$n = @{}
$n.config = Add-Node $p "M<>ny<7F>u<EFBFBD>`nMRn / <00>c<EFBFBD>S / MQ <00>Spe" 2.0 6.8 2.75 0.75
$n.ledgerPage = Add-Node $p "<00>S&<26>Rh<52>u<EFBFBD>`nXML/json/origin/output _" 5.0 6.8 2.85 0.75
$n.tree = Add-Node $p "<00><><EFBFBD>S<EFBFBD>S&<26>`nۏ z -> ňn -> Km<4B>ph" 8.0 6.8 2.7 0.75 "RGB(226,239,218)" "RGB(112,173,71)"
$n.actions = Add-Node $p " c<><63><EFBFBD>R\O`nR<>YS MQ / penc<6E><63>*<2A> / N.<2E>㉐g" 11.0 6.8 2.9 0.75 "RGB(255,242,204)" "RGB(191,143,0)"
$n.json = Add-Node $p "JSON <00><><EFBFBD>`u<EFBFBD>`nsent / data / trace R<>~" 3.4 4.9 2.85 0.75
$n.preview = Add-Node $p "h<><h<><68>ȉu<C889>`nSheet0<>r`0<>vMO0d"}Ǐ<EFBFBD>n" 6.5 4.9 3.0 0.75
$n.edit = Add-Node $p "<00>S<EFBFBD>Q<><7F>M<EFBFBD>nR`n Tek A/B/C N<>v" 9.6 4.9 2.85 0.75 "RGB(255,242,204)" "RGB(191,143,0)"
$n.xml = Add-Node $p "XML <00><>ȉu<C889>`nd"}0<EFBFBD>[<EFBFBD>Q<EFBFBD>T XML" 6.5 3.0 2.9 0.75 "RGB(234,209,220)" "RGB(166,77,121)"
Add-Edge $p $n.config $n.ledgerPage
Add-Edge $p $n.ledgerPage $n.tree
Add-Edge $p $n.tree $n.actions
Add-Arrow $p 10.5 6.43 9.6 5.3 "㉐g/<00><>*<2A>T7R<37>e" | Out-Null
Add-Arrow $p 10.5 6.43 6.5 5.3 "ub<>]\O?|" | Out-Null
Add-Arrow $p 3.0 6.43 3.4 5.3 "MQ <00>N<EFBFBD>N" | Out-Null
Add-Edge $p $n.preview $n.edit
Add-Edge $p $n.edit $n.xml "<06>Tub"
Add-Arrow $p 3.4 4.52 6.5 3.38 "ꁨR㉐g<E38990>[b" | Out-Null
}
function Build-IcdFlow {
param($Doc)
$p = New-Page $Doc 3 "ICD㉐gAm z"
$n = @{}
$n.xml = Add-Node $p "ICD/XML !jg<7F>e<EFBFBD>N" 2.0 7.0 2.4 0.62
$n.load = Add-Node $p "loadValueMetas()`n<12>R_M<5F><4D>S XML" 4.8 7.0 2.55 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.ctx = Add-Node $p "<00>~b
N N<EFBFBD>e`nTopic/DataType/Item/Sequence" 7.8 7.0 3.0 0.72 "RGB(255,242,204)" "RGB(191,143,0)"
$n.meta = Add-Node $p "ub ValueMeta`nname/desc/DO/DA/wiring/offset" 10.8 7.0 3.05 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.flag = Add-Node $p "h<>_l<5F>bc`nSequence 7=star <0C>112=delta`n%start,end%=<00>^R!jg" 4.0 5.45 3.25 0.9 "RGB(255,242,204)" "RGB(191,143,0)"
$n.json = Add-Node $p "jsondata <00>Ss^`nValue_V_A_MAX_V1 -> value" 7.1 5.45 3.0 0.72
$n.merge = Add-Node $p "mergeSequences()`nޏ<>~<>S -> [start-end]" 10.2 5.45 3.0 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.sheet = Add-Node $p " c SheetSpec ubL<62>`nHISDATA/RTDATA + DATA_TYPE + <00>c<EFBFBD>~" 5.6 3.85 3.35 0.82 "RGB(226,239,218)" "RGB(112,173,71)"
$n.origin = Add-Node $p "origin _9SM<53>`nDO + <00>vMOS DA + pe<70>~:S<><53>" 8.8 3.85 3.25 0.82 "RGB(226,239,218)" "RGB(112,173,71)"
$n.out = Add-Node $p "<00>Q<EFBFBD>Q final_sorted.xls`nck8^/_8^/:1Y/*g9SM<53>" 7.2 2.3 3.05 0.75 "RGB(234,209,220)" "RGB(166,77,121)"
$n.import = Add-Node $p "<00>[eQY<><59> ICD`nLN/DOI desc -> *g9SM<53>u<EFBFBD>W[<5B>k<EFBFBD><6B>f" 7.2 1.15 4.0 0.75 "RGB(234,209,220)" "RGB(166,77,121)"
Add-Edge $p $n.xml $n.load
Add-Edge $p $n.load $n.ctx
Add-Edge $p $n.ctx $n.meta
Add-Arrow $p 10.0 6.64 5.0 5.85 "Value/@name" | Out-Null
Add-Edge $p $n.json $n.merge
Add-Arrow $p 10.2 5.09 8.8 4.28 "" | Out-Null
Add-Arrow $p 4.0 5.00 5.6 4.28 "" | Out-Null
Add-Edge $p $n.sheet $n.out
Add-Edge $p $n.origin $n.out
Add-Edge $p $n.out $n.import
}
function Build-TraceFlow {
param($Doc)
$p = New-Page $Doc 4 "penc<6E><63>*<2A>Am z"
$n = @{}
$n.sel = Add-Node $p "<00>]<5D>Oh <09><>bKm<4B>p`ndevice + monitor" 2.2 7.0 2.6 0.72
$n.dir = Add-Node $p "pqTraceDirectoryFor()`nprocess/device/monitor <00>vU_" 5.1 7.0 3.0 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.clean = Add-Node $p "nzz<7A>e<EFBFBD>e,g<><67>U_`n<00>QY json/origin/output _" 8.2 7.0 3.1 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.payload = Add-Node $p "pqBuildTracePayload()`nguid + set_log + frontType" 11.1 7.0 3.0 0.72 "RGB(255,242,204)" "RGB(191,143,0)"
$n.ctx = Add-Node $p "setTraceTarget()`n<00>Q trace_context.json" 3.6 5.45 2.9 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.send = Add-Node $p "RocketMQ <00>S(u<1F>" 6.5 5.45 2.35 0.62 "RGB(255,242,204)" "RGB(191,143,0)"
$n.mq = Add-Node $p " Tek<65>S<01> TopicLOG`nTagLOG / KeyLOG" 9.3 5.45 2.65 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.outbox = Add-Node $p " N<EFBFBD>S(u<1A><>Q mq_outbox_*.jsonl" 9.3 4.35 2.95 0.62 "RGB(244,204,204)" "RGB(192,0,0)"
$n.cb = Add-Node $p "MQ <00>m9<6D><39>V<03>`nTopic/Tag + monitorId/guid <00><>1u" 3.6 3.45 3.25 0.82 "RGB(226,239,218)" "RGB(112,173,71)"
$n.data = Add-Node $p "DATATopic`nDATA_TYPE <00>-> jsondata_*.txt" 6.9 3.45 3.25 0.82 "RGB(226,239,218)" "RGB(112,173,71)"
$n.trace = Add-Node $p "TraceTopic`n<00>e<EFBFBD><65>3bǏ<62>n -> origin_*.txt" 10.2 3.45 3.25 0.82 "RGB(226,239,218)" "RGB(112,173,71)"
$n.auto = Add-Node $p "PostMessage 0R GUI`nautoParseTraceDir()" 6.9 1.95 3.0 0.75 "RGB(234,209,220)" "RGB(166,77,121)"
Add-Edge $p $n.sel $n.dir
Add-Edge $p $n.dir $n.clean
Add-Edge $p $n.clean $n.payload
Add-Arrow $p 10.2 6.64 4.5 5.85 "" | Out-Null
Add-Edge $p $n.ctx $n.send
Add-Edge $p $n.send $n.mq "/f"
Add-Arrow $p 6.5 5.14 8.1 4.45 "&T" | Out-Null
Add-Arrow $p 9.3 5.09 3.6 3.88 "6e0R<30>mo`" | Out-Null
Add-Edge $p $n.cb $n.data
Add-Edge $p $n.data $n.trace
Add-Arrow $p 6.9 3.04 6.9 2.33 "<00>e<EFBFBD>N0RP<52>T" | Out-Null
}
function Build-ReverseXmlFlow {
param($Doc)
$p = New-Page $Doc 5 "<06>TubXMLAm z"
$n = @{}
$n.preview = Add-Node $p "h<><h<><68>ȉu<C889>`n<00><><EFBFBD>S final_sorted.xls" 2.0 7.0 2.75 0.72
$n.edit = Add-Node $p "<00>S<EFBFBD>Q<><7F>M<EFBFBD>nR`npe<70>~<7E>W<EFBFBD>Q/OP<4F>y/DO/DA" 5.0 7.0 3.0 0.72 "RGB(255,242,204)" "RGB(191,143,0)"
$n.sync = Add-Node $p "commitPreviewEdit()`n Tek A/B/C N<>vv^n dirty" 8.2 7.0 3.15 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.rows = Add-Node $p "collectReverseRows()`n<00>SǑƖpencL<63><4C>T9e<39>RL<52>" 11.1 7.0 3.0 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.spec = Add-Node $p "reverseSpecForSheet()`nSheet T -> Topic/DataType/wiring" 3.6 5.4 3.35 0.82 "RGB(255,242,204)" "RGB(191,143,0)"
$n.xml = Add-Node $p "<00><><EFBFBD>S<EFBFBD>S<EFBFBD>Y XML`ncollectValueNodes()" 6.9 5.4 2.9 0.72
$n.match = Add-Node $p "reverseNodeMatches()`nOHQ<48>S<EFBFBD>Y DO/DA <0C><>Q name/desc" 10.2 5.4 3.35 0.82 "RGB(226,239,218)" "RGB(112,173,71)"
$n.convert = Add-Node $p "h<><5F>S`n[start-end] -> %start,end%`n[offset] -> [%offset]" 5.1 3.75 3.45 0.92 "RGB(255,242,204)" "RGB(191,143,0)"
$n.update = Add-Node $p "<00>f<EFBFBD>e Value ^\'``nname / DO / DA / Offset" 8.5 3.75 3.0 0.72 "RGB(226,239,218)" "RGB(112,173,71)"
$n.out = Add-Node $p "XML <00><>ȉu<C889>`nd"} / <EFBFBD>[<EFBFBD>Q xml b icd" 6.8 2.15 3.0 0.75 "RGB(234,209,220)" "RGB(166,77,121)"
Add-Edge $p $n.preview $n.edit
Add-Edge $p $n.edit $n.sync
Add-Edge $p $n.sync $n.rows
Add-Arrow $p 10.2 6.64 4.3 5.82 "" | Out-Null
Add-Edge $p $n.spec $n.xml
Add-Edge $p $n.xml $n.match
Add-Arrow $p 10.2 4.98 8.5 4.15 "9SM<53>0R<30><52><EFBFBD>p" | Out-Null
Add-Edge $p $n.convert $n.update
Add-Edge $p $n.update $n.out
}
$outDir = $PSScriptRoot
$outPath = Join-Path $outDir "pq_tool_flowcharts.vsdx"
$visio = $null
$doc = $null
try {
$visio = New-Object -ComObject Visio.Application
$visio.Visible = $false
$visio.AlertResponse = 7
$doc = $visio.Documents.Add("")
Build-MainFlow $doc
Build-UiFlow $doc
Build-IcdFlow $doc
Build-TraceFlow $doc
Build-ReverseXmlFlow $doc
if (Test-Path -LiteralPath $outPath) {
Remove-Item -LiteralPath $outPath -Force
}
$doc.SaveAs($outPath)
Write-Host "[OK] Saved $outPath"
}
finally {
if ($doc -ne $null) {
try { $doc.Close() } catch {}
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($doc) | Out-Null
}
if ($visio -ne $null) {
try { $visio.Quit() } catch {}
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($visio) | Out-Null
}
[GC]::Collect()
[GC]::WaitForPendingFinalizers()
}