maintenance_queue_templ.go 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876
  1. // Code generated by templ - DO NOT EDIT.
  2. // templ: version: v0.3.906
  3. package app
  4. //lint:file-ignore SA4006 This context is only used if a nested component is present.
  5. import "github.com/a-h/templ"
  6. import templruntime "github.com/a-h/templ/runtime"
  7. import (
  8. "fmt"
  9. "github.com/seaweedfs/seaweedfs/weed/admin/maintenance"
  10. "time"
  11. )
  12. func MaintenanceQueue(data *maintenance.MaintenanceQueueData) templ.Component {
  13. return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
  14. templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
  15. if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
  16. return templ_7745c5c3_CtxErr
  17. }
  18. templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
  19. if !templ_7745c5c3_IsBuffer {
  20. defer func() {
  21. templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
  22. if templ_7745c5c3_Err == nil {
  23. templ_7745c5c3_Err = templ_7745c5c3_BufErr
  24. }
  25. }()
  26. }
  27. ctx = templ.InitializeContext(ctx)
  28. templ_7745c5c3_Var1 := templ.GetChildren(ctx)
  29. if templ_7745c5c3_Var1 == nil {
  30. templ_7745c5c3_Var1 = templ.NopComponent
  31. }
  32. ctx = templ.ClearChildren(ctx)
  33. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"container-fluid\"><!-- Header --><div class=\"row mb-4\"><div class=\"col-12\"><div class=\"d-flex justify-content-between align-items-center\"><h2 class=\"mb-0\"><i class=\"fas fa-tasks me-2\"></i> Maintenance Queue</h2><div class=\"btn-group\"><button type=\"button\" class=\"btn btn-primary\" onclick=\"triggerScan()\"><i class=\"fas fa-search me-1\"></i> Trigger Scan</button> <button type=\"button\" class=\"btn btn-secondary\" onclick=\"refreshPage()\"><i class=\"fas fa-sync-alt me-1\"></i> Refresh</button></div></div></div></div><!-- Statistics Cards --><div class=\"row mb-4\"><div class=\"col-md-3\"><div class=\"card border-primary\"><div class=\"card-body text-center\"><i class=\"fas fa-clock fa-2x text-primary mb-2\"></i><h4 class=\"mb-1\">")
  34. if templ_7745c5c3_Err != nil {
  35. return templ_7745c5c3_Err
  36. }
  37. var templ_7745c5c3_Var2 string
  38. templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.Stats.PendingTasks))
  39. if templ_7745c5c3_Err != nil {
  40. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 39, Col: 84}
  41. }
  42. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
  43. if templ_7745c5c3_Err != nil {
  44. return templ_7745c5c3_Err
  45. }
  46. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "</h4><p class=\"text-muted mb-0\">Pending Tasks</p></div></div></div><div class=\"col-md-3\"><div class=\"card border-warning\"><div class=\"card-body text-center\"><i class=\"fas fa-running fa-2x text-warning mb-2\"></i><h4 class=\"mb-1\">")
  47. if templ_7745c5c3_Err != nil {
  48. return templ_7745c5c3_Err
  49. }
  50. var templ_7745c5c3_Var3 string
  51. templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.Stats.RunningTasks))
  52. if templ_7745c5c3_Err != nil {
  53. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 48, Col: 84}
  54. }
  55. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
  56. if templ_7745c5c3_Err != nil {
  57. return templ_7745c5c3_Err
  58. }
  59. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "</h4><p class=\"text-muted mb-0\">Running Tasks</p></div></div></div><div class=\"col-md-3\"><div class=\"card border-success\"><div class=\"card-body text-center\"><i class=\"fas fa-check-circle fa-2x text-success mb-2\"></i><h4 class=\"mb-1\">")
  60. if templ_7745c5c3_Err != nil {
  61. return templ_7745c5c3_Err
  62. }
  63. var templ_7745c5c3_Var4 string
  64. templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.Stats.CompletedToday))
  65. if templ_7745c5c3_Err != nil {
  66. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 57, Col: 86}
  67. }
  68. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
  69. if templ_7745c5c3_Err != nil {
  70. return templ_7745c5c3_Err
  71. }
  72. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "</h4><p class=\"text-muted mb-0\">Completed Today</p></div></div></div><div class=\"col-md-3\"><div class=\"card border-danger\"><div class=\"card-body text-center\"><i class=\"fas fa-exclamation-triangle fa-2x text-danger mb-2\"></i><h4 class=\"mb-1\">")
  73. if templ_7745c5c3_Err != nil {
  74. return templ_7745c5c3_Err
  75. }
  76. var templ_7745c5c3_Var5 string
  77. templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.Stats.FailedToday))
  78. if templ_7745c5c3_Err != nil {
  79. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 66, Col: 83}
  80. }
  81. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
  82. if templ_7745c5c3_Err != nil {
  83. return templ_7745c5c3_Err
  84. }
  85. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "</h4><p class=\"text-muted mb-0\">Failed Today</p></div></div></div></div><!-- Completed Tasks --><div class=\"row mb-4\"><div class=\"col-12\"><div class=\"card\"><div class=\"card-header bg-success text-white\"><h5 class=\"mb-0\"><i class=\"fas fa-check-circle me-2\"></i> Completed Tasks</h5></div><div class=\"card-body\">")
  86. if templ_7745c5c3_Err != nil {
  87. return templ_7745c5c3_Err
  88. }
  89. if data.Stats.CompletedToday == 0 && data.Stats.FailedToday == 0 {
  90. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "<div class=\"text-center text-muted py-4\"><i class=\"fas fa-check-circle fa-3x mb-3\"></i><p>No completed maintenance tasks today</p><small>Completed tasks will appear here after workers finish processing them</small></div>")
  91. if templ_7745c5c3_Err != nil {
  92. return templ_7745c5c3_Err
  93. }
  94. } else {
  95. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "<div class=\"table-responsive\"><table class=\"table table-hover\"><thead><tr><th>Type</th><th>Status</th><th>Volume</th><th>Worker</th><th>Duration</th><th>Completed</th></tr></thead> <tbody>")
  96. if templ_7745c5c3_Err != nil {
  97. return templ_7745c5c3_Err
  98. }
  99. for _, task := range data.Tasks {
  100. if string(task.Status) == "completed" || string(task.Status) == "failed" || string(task.Status) == "cancelled" {
  101. if string(task.Status) == "failed" {
  102. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "<tr class=\"table-danger clickable-row\" data-task-id=\"")
  103. if templ_7745c5c3_Err != nil {
  104. return templ_7745c5c3_Err
  105. }
  106. var templ_7745c5c3_Var6 string
  107. templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(task.ID)
  108. if templ_7745c5c3_Err != nil {
  109. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 107, Col: 112}
  110. }
  111. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
  112. if templ_7745c5c3_Err != nil {
  113. return templ_7745c5c3_Err
  114. }
  115. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "\" onclick=\"navigateToTask(this)\" style=\"cursor: pointer;\"><td>")
  116. if templ_7745c5c3_Err != nil {
  117. return templ_7745c5c3_Err
  118. }
  119. templ_7745c5c3_Err = TaskTypeIcon(task.Type).Render(ctx, templ_7745c5c3_Buffer)
  120. if templ_7745c5c3_Err != nil {
  121. return templ_7745c5c3_Err
  122. }
  123. var templ_7745c5c3_Var7 string
  124. templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(string(task.Type))
  125. if templ_7745c5c3_Err != nil {
  126. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 110, Col: 78}
  127. }
  128. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
  129. if templ_7745c5c3_Err != nil {
  130. return templ_7745c5c3_Err
  131. }
  132. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "</td><td>")
  133. if templ_7745c5c3_Err != nil {
  134. return templ_7745c5c3_Err
  135. }
  136. templ_7745c5c3_Err = StatusBadge(task.Status).Render(ctx, templ_7745c5c3_Buffer)
  137. if templ_7745c5c3_Err != nil {
  138. return templ_7745c5c3_Err
  139. }
  140. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</td><td>")
  141. if templ_7745c5c3_Err != nil {
  142. return templ_7745c5c3_Err
  143. }
  144. var templ_7745c5c3_Var8 string
  145. templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", task.VolumeID))
  146. if templ_7745c5c3_Err != nil {
  147. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 113, Col: 93}
  148. }
  149. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
  150. if templ_7745c5c3_Err != nil {
  151. return templ_7745c5c3_Err
  152. }
  153. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "</td><td>")
  154. if templ_7745c5c3_Err != nil {
  155. return templ_7745c5c3_Err
  156. }
  157. if task.WorkerID != "" {
  158. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<small>")
  159. if templ_7745c5c3_Err != nil {
  160. return templ_7745c5c3_Err
  161. }
  162. var templ_7745c5c3_Var9 string
  163. templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(task.WorkerID)
  164. if templ_7745c5c3_Err != nil {
  165. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 116, Col: 85}
  166. }
  167. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
  168. if templ_7745c5c3_Err != nil {
  169. return templ_7745c5c3_Err
  170. }
  171. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "</small>")
  172. if templ_7745c5c3_Err != nil {
  173. return templ_7745c5c3_Err
  174. }
  175. } else {
  176. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "<span class=\"text-muted\">-</span>")
  177. if templ_7745c5c3_Err != nil {
  178. return templ_7745c5c3_Err
  179. }
  180. }
  181. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "</td><td>")
  182. if templ_7745c5c3_Err != nil {
  183. return templ_7745c5c3_Err
  184. }
  185. if task.StartedAt != nil && task.CompletedAt != nil {
  186. var templ_7745c5c3_Var10 string
  187. templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(formatDuration(task.CompletedAt.Sub(*task.StartedAt)))
  188. if templ_7745c5c3_Err != nil {
  189. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 123, Col: 118}
  190. }
  191. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
  192. if templ_7745c5c3_Err != nil {
  193. return templ_7745c5c3_Err
  194. }
  195. } else {
  196. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "<span class=\"text-muted\">-</span>")
  197. if templ_7745c5c3_Err != nil {
  198. return templ_7745c5c3_Err
  199. }
  200. }
  201. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "</td><td>")
  202. if templ_7745c5c3_Err != nil {
  203. return templ_7745c5c3_Err
  204. }
  205. if task.CompletedAt != nil {
  206. var templ_7745c5c3_Var11 string
  207. templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(task.CompletedAt.Format("2006-01-02 15:04"))
  208. if templ_7745c5c3_Err != nil {
  209. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 130, Col: 108}
  210. }
  211. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
  212. if templ_7745c5c3_Err != nil {
  213. return templ_7745c5c3_Err
  214. }
  215. } else {
  216. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<span class=\"text-muted\">-</span>")
  217. if templ_7745c5c3_Err != nil {
  218. return templ_7745c5c3_Err
  219. }
  220. }
  221. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "</td></tr>")
  222. if templ_7745c5c3_Err != nil {
  223. return templ_7745c5c3_Err
  224. }
  225. } else {
  226. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "<tr class=\"clickable-row\" data-task-id=\"")
  227. if templ_7745c5c3_Err != nil {
  228. return templ_7745c5c3_Err
  229. }
  230. var templ_7745c5c3_Var12 string
  231. templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(task.ID)
  232. if templ_7745c5c3_Err != nil {
  233. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 137, Col: 99}
  234. }
  235. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
  236. if templ_7745c5c3_Err != nil {
  237. return templ_7745c5c3_Err
  238. }
  239. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "\" onclick=\"navigateToTask(this)\" style=\"cursor: pointer;\"><td>")
  240. if templ_7745c5c3_Err != nil {
  241. return templ_7745c5c3_Err
  242. }
  243. templ_7745c5c3_Err = TaskTypeIcon(task.Type).Render(ctx, templ_7745c5c3_Buffer)
  244. if templ_7745c5c3_Err != nil {
  245. return templ_7745c5c3_Err
  246. }
  247. var templ_7745c5c3_Var13 string
  248. templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(string(task.Type))
  249. if templ_7745c5c3_Err != nil {
  250. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 140, Col: 78}
  251. }
  252. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
  253. if templ_7745c5c3_Err != nil {
  254. return templ_7745c5c3_Err
  255. }
  256. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "</td><td>")
  257. if templ_7745c5c3_Err != nil {
  258. return templ_7745c5c3_Err
  259. }
  260. templ_7745c5c3_Err = StatusBadge(task.Status).Render(ctx, templ_7745c5c3_Buffer)
  261. if templ_7745c5c3_Err != nil {
  262. return templ_7745c5c3_Err
  263. }
  264. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</td><td>")
  265. if templ_7745c5c3_Err != nil {
  266. return templ_7745c5c3_Err
  267. }
  268. var templ_7745c5c3_Var14 string
  269. templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", task.VolumeID))
  270. if templ_7745c5c3_Err != nil {
  271. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 143, Col: 93}
  272. }
  273. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
  274. if templ_7745c5c3_Err != nil {
  275. return templ_7745c5c3_Err
  276. }
  277. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "</td><td>")
  278. if templ_7745c5c3_Err != nil {
  279. return templ_7745c5c3_Err
  280. }
  281. if task.WorkerID != "" {
  282. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "<small>")
  283. if templ_7745c5c3_Err != nil {
  284. return templ_7745c5c3_Err
  285. }
  286. var templ_7745c5c3_Var15 string
  287. templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(task.WorkerID)
  288. if templ_7745c5c3_Err != nil {
  289. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 146, Col: 85}
  290. }
  291. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
  292. if templ_7745c5c3_Err != nil {
  293. return templ_7745c5c3_Err
  294. }
  295. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "</small>")
  296. if templ_7745c5c3_Err != nil {
  297. return templ_7745c5c3_Err
  298. }
  299. } else {
  300. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "<span class=\"text-muted\">-</span>")
  301. if templ_7745c5c3_Err != nil {
  302. return templ_7745c5c3_Err
  303. }
  304. }
  305. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</td><td>")
  306. if templ_7745c5c3_Err != nil {
  307. return templ_7745c5c3_Err
  308. }
  309. if task.StartedAt != nil && task.CompletedAt != nil {
  310. var templ_7745c5c3_Var16 string
  311. templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(formatDuration(task.CompletedAt.Sub(*task.StartedAt)))
  312. if templ_7745c5c3_Err != nil {
  313. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 153, Col: 118}
  314. }
  315. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
  316. if templ_7745c5c3_Err != nil {
  317. return templ_7745c5c3_Err
  318. }
  319. } else {
  320. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "<span class=\"text-muted\">-</span>")
  321. if templ_7745c5c3_Err != nil {
  322. return templ_7745c5c3_Err
  323. }
  324. }
  325. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "</td><td>")
  326. if templ_7745c5c3_Err != nil {
  327. return templ_7745c5c3_Err
  328. }
  329. if task.CompletedAt != nil {
  330. var templ_7745c5c3_Var17 string
  331. templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(task.CompletedAt.Format("2006-01-02 15:04"))
  332. if templ_7745c5c3_Err != nil {
  333. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 160, Col: 108}
  334. }
  335. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
  336. if templ_7745c5c3_Err != nil {
  337. return templ_7745c5c3_Err
  338. }
  339. } else {
  340. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "<span class=\"text-muted\">-</span>")
  341. if templ_7745c5c3_Err != nil {
  342. return templ_7745c5c3_Err
  343. }
  344. }
  345. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</td></tr>")
  346. if templ_7745c5c3_Err != nil {
  347. return templ_7745c5c3_Err
  348. }
  349. }
  350. }
  351. }
  352. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</tbody></table></div>")
  353. if templ_7745c5c3_Err != nil {
  354. return templ_7745c5c3_Err
  355. }
  356. }
  357. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</div></div></div></div><!-- Pending Tasks --><div class=\"row mb-4\"><div class=\"col-12\"><div class=\"card\"><div class=\"card-header bg-primary text-white\"><h5 class=\"mb-0\"><i class=\"fas fa-clock me-2\"></i> Pending Tasks</h5></div><div class=\"card-body\">")
  358. if templ_7745c5c3_Err != nil {
  359. return templ_7745c5c3_Err
  360. }
  361. if data.Stats.PendingTasks == 0 {
  362. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "<div class=\"text-center text-muted py-4\"><i class=\"fas fa-clipboard-list fa-3x mb-3\"></i><p>No pending maintenance tasks</p><small>Pending tasks will appear here when the system detects maintenance needs</small></div>")
  363. if templ_7745c5c3_Err != nil {
  364. return templ_7745c5c3_Err
  365. }
  366. } else {
  367. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "<div class=\"table-responsive\"><table class=\"table table-hover\"><thead><tr><th>Type</th><th>Priority</th><th>Volume</th><th>Server</th><th>Reason</th><th>Created</th></tr></thead> <tbody>")
  368. if templ_7745c5c3_Err != nil {
  369. return templ_7745c5c3_Err
  370. }
  371. for _, task := range data.Tasks {
  372. if string(task.Status) == "pending" {
  373. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<tr class=\"clickable-row\" data-task-id=\"")
  374. if templ_7745c5c3_Err != nil {
  375. return templ_7745c5c3_Err
  376. }
  377. var templ_7745c5c3_Var18 string
  378. templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(task.ID)
  379. if templ_7745c5c3_Err != nil {
  380. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 211, Col: 95}
  381. }
  382. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
  383. if templ_7745c5c3_Err != nil {
  384. return templ_7745c5c3_Err
  385. }
  386. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "\" onclick=\"navigateToTask(this)\" style=\"cursor: pointer;\"><td>")
  387. if templ_7745c5c3_Err != nil {
  388. return templ_7745c5c3_Err
  389. }
  390. templ_7745c5c3_Err = TaskTypeIcon(task.Type).Render(ctx, templ_7745c5c3_Buffer)
  391. if templ_7745c5c3_Err != nil {
  392. return templ_7745c5c3_Err
  393. }
  394. var templ_7745c5c3_Var19 string
  395. templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(string(task.Type))
  396. if templ_7745c5c3_Err != nil {
  397. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 214, Col: 74}
  398. }
  399. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
  400. if templ_7745c5c3_Err != nil {
  401. return templ_7745c5c3_Err
  402. }
  403. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</td><td>")
  404. if templ_7745c5c3_Err != nil {
  405. return templ_7745c5c3_Err
  406. }
  407. templ_7745c5c3_Err = PriorityBadge(task.Priority).Render(ctx, templ_7745c5c3_Buffer)
  408. if templ_7745c5c3_Err != nil {
  409. return templ_7745c5c3_Err
  410. }
  411. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "</td><td>")
  412. if templ_7745c5c3_Err != nil {
  413. return templ_7745c5c3_Err
  414. }
  415. var templ_7745c5c3_Var20 string
  416. templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", task.VolumeID))
  417. if templ_7745c5c3_Err != nil {
  418. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 217, Col: 89}
  419. }
  420. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
  421. if templ_7745c5c3_Err != nil {
  422. return templ_7745c5c3_Err
  423. }
  424. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "</td><td><small>")
  425. if templ_7745c5c3_Err != nil {
  426. return templ_7745c5c3_Err
  427. }
  428. var templ_7745c5c3_Var21 string
  429. templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(task.Server)
  430. if templ_7745c5c3_Err != nil {
  431. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 218, Col: 75}
  432. }
  433. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
  434. if templ_7745c5c3_Err != nil {
  435. return templ_7745c5c3_Err
  436. }
  437. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</small></td><td><small>")
  438. if templ_7745c5c3_Err != nil {
  439. return templ_7745c5c3_Err
  440. }
  441. var templ_7745c5c3_Var22 string
  442. templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(task.Reason)
  443. if templ_7745c5c3_Err != nil {
  444. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 219, Col: 75}
  445. }
  446. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
  447. if templ_7745c5c3_Err != nil {
  448. return templ_7745c5c3_Err
  449. }
  450. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</small></td><td>")
  451. if templ_7745c5c3_Err != nil {
  452. return templ_7745c5c3_Err
  453. }
  454. var templ_7745c5c3_Var23 string
  455. templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(task.CreatedAt.Format("2006-01-02 15:04"))
  456. if templ_7745c5c3_Err != nil {
  457. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 220, Col: 98}
  458. }
  459. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
  460. if templ_7745c5c3_Err != nil {
  461. return templ_7745c5c3_Err
  462. }
  463. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "</td></tr>")
  464. if templ_7745c5c3_Err != nil {
  465. return templ_7745c5c3_Err
  466. }
  467. }
  468. }
  469. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</tbody></table></div>")
  470. if templ_7745c5c3_Err != nil {
  471. return templ_7745c5c3_Err
  472. }
  473. }
  474. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "</div></div></div></div><!-- Active Tasks --><div class=\"row mb-4\"><div class=\"col-12\"><div class=\"card\"><div class=\"card-header bg-warning text-dark\"><h5 class=\"mb-0\"><i class=\"fas fa-running me-2\"></i> Active Tasks</h5></div><div class=\"card-body\">")
  475. if templ_7745c5c3_Err != nil {
  476. return templ_7745c5c3_Err
  477. }
  478. if data.Stats.RunningTasks == 0 {
  479. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<div class=\"text-center text-muted py-4\"><i class=\"fas fa-tasks fa-3x mb-3\"></i><p>No active maintenance tasks</p><small>Active tasks will appear here when workers start processing them</small></div>")
  480. if templ_7745c5c3_Err != nil {
  481. return templ_7745c5c3_Err
  482. }
  483. } else {
  484. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<div class=\"table-responsive\"><table class=\"table table-hover\"><thead><tr><th>Type</th><th>Status</th><th>Progress</th><th>Volume</th><th>Worker</th><th>Started</th></tr></thead> <tbody>")
  485. if templ_7745c5c3_Err != nil {
  486. return templ_7745c5c3_Err
  487. }
  488. for _, task := range data.Tasks {
  489. if string(task.Status) == "assigned" || string(task.Status) == "in_progress" {
  490. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<tr class=\"clickable-row\" data-task-id=\"")
  491. if templ_7745c5c3_Err != nil {
  492. return templ_7745c5c3_Err
  493. }
  494. var templ_7745c5c3_Var24 string
  495. templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(task.ID)
  496. if templ_7745c5c3_Err != nil {
  497. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 266, Col: 95}
  498. }
  499. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
  500. if templ_7745c5c3_Err != nil {
  501. return templ_7745c5c3_Err
  502. }
  503. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "\" onclick=\"navigateToTask(this)\" style=\"cursor: pointer;\"><td>")
  504. if templ_7745c5c3_Err != nil {
  505. return templ_7745c5c3_Err
  506. }
  507. templ_7745c5c3_Err = TaskTypeIcon(task.Type).Render(ctx, templ_7745c5c3_Buffer)
  508. if templ_7745c5c3_Err != nil {
  509. return templ_7745c5c3_Err
  510. }
  511. var templ_7745c5c3_Var25 string
  512. templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(string(task.Type))
  513. if templ_7745c5c3_Err != nil {
  514. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 269, Col: 74}
  515. }
  516. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
  517. if templ_7745c5c3_Err != nil {
  518. return templ_7745c5c3_Err
  519. }
  520. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</td><td>")
  521. if templ_7745c5c3_Err != nil {
  522. return templ_7745c5c3_Err
  523. }
  524. templ_7745c5c3_Err = StatusBadge(task.Status).Render(ctx, templ_7745c5c3_Buffer)
  525. if templ_7745c5c3_Err != nil {
  526. return templ_7745c5c3_Err
  527. }
  528. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "</td><td>")
  529. if templ_7745c5c3_Err != nil {
  530. return templ_7745c5c3_Err
  531. }
  532. templ_7745c5c3_Err = ProgressBar(task.Progress, task.Status).Render(ctx, templ_7745c5c3_Buffer)
  533. if templ_7745c5c3_Err != nil {
  534. return templ_7745c5c3_Err
  535. }
  536. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "</td><td>")
  537. if templ_7745c5c3_Err != nil {
  538. return templ_7745c5c3_Err
  539. }
  540. var templ_7745c5c3_Var26 string
  541. templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", task.VolumeID))
  542. if templ_7745c5c3_Err != nil {
  543. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 273, Col: 89}
  544. }
  545. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
  546. if templ_7745c5c3_Err != nil {
  547. return templ_7745c5c3_Err
  548. }
  549. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "</td><td>")
  550. if templ_7745c5c3_Err != nil {
  551. return templ_7745c5c3_Err
  552. }
  553. if task.WorkerID != "" {
  554. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "<small>")
  555. if templ_7745c5c3_Err != nil {
  556. return templ_7745c5c3_Err
  557. }
  558. var templ_7745c5c3_Var27 string
  559. templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(task.WorkerID)
  560. if templ_7745c5c3_Err != nil {
  561. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 276, Col: 81}
  562. }
  563. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
  564. if templ_7745c5c3_Err != nil {
  565. return templ_7745c5c3_Err
  566. }
  567. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</small>")
  568. if templ_7745c5c3_Err != nil {
  569. return templ_7745c5c3_Err
  570. }
  571. } else {
  572. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "<span class=\"text-muted\">-</span>")
  573. if templ_7745c5c3_Err != nil {
  574. return templ_7745c5c3_Err
  575. }
  576. }
  577. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</td><td>")
  578. if templ_7745c5c3_Err != nil {
  579. return templ_7745c5c3_Err
  580. }
  581. if task.StartedAt != nil {
  582. var templ_7745c5c3_Var28 string
  583. templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(task.StartedAt.Format("2006-01-02 15:04"))
  584. if templ_7745c5c3_Err != nil {
  585. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 283, Col: 102}
  586. }
  587. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
  588. if templ_7745c5c3_Err != nil {
  589. return templ_7745c5c3_Err
  590. }
  591. } else {
  592. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "<span class=\"text-muted\">-</span>")
  593. if templ_7745c5c3_Err != nil {
  594. return templ_7745c5c3_Err
  595. }
  596. }
  597. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</td></tr>")
  598. if templ_7745c5c3_Err != nil {
  599. return templ_7745c5c3_Err
  600. }
  601. }
  602. }
  603. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "</tbody></table></div>")
  604. if templ_7745c5c3_Err != nil {
  605. return templ_7745c5c3_Err
  606. }
  607. }
  608. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "</div></div></div></div></div><script>\n // Debug output to browser console\n console.log(\"DEBUG: Maintenance Queue Template loaded\");\n \n // Auto-refresh every 10 seconds\n setInterval(function() {\n if (!document.hidden) {\n window.location.reload();\n }\n }, 10000);\n\n window.triggerScan = function() {\n console.log(\"triggerScan called\");\n fetch('/api/maintenance/scan', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n }\n })\n .then(response => response.json())\n .then(data => {\n if (data.success) {\n alert('Maintenance scan triggered successfully');\n setTimeout(() => window.location.reload(), 2000);\n } else {\n alert('Failed to trigger scan: ' + (data.error || 'Unknown error'));\n }\n })\n .catch(error => {\n alert('Error: ' + error.message);\n });\n };\n\n window.refreshPage = function() {\n console.log(\"refreshPage called\");\n window.location.reload();\n };\n\n window.navigateToTask = function(element) {\n const taskId = element.getAttribute('data-task-id');\n if (taskId) {\n window.location.href = '/maintenance/tasks/' + taskId;\n }\n };\n </script>")
  609. if templ_7745c5c3_Err != nil {
  610. return templ_7745c5c3_Err
  611. }
  612. return nil
  613. })
  614. }
  615. // Helper components
  616. func TaskTypeIcon(taskType maintenance.MaintenanceTaskType) templ.Component {
  617. return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
  618. templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
  619. if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
  620. return templ_7745c5c3_CtxErr
  621. }
  622. templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
  623. if !templ_7745c5c3_IsBuffer {
  624. defer func() {
  625. templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
  626. if templ_7745c5c3_Err == nil {
  627. templ_7745c5c3_Err = templ_7745c5c3_BufErr
  628. }
  629. }()
  630. }
  631. ctx = templ.InitializeContext(ctx)
  632. templ_7745c5c3_Var29 := templ.GetChildren(ctx)
  633. if templ_7745c5c3_Var29 == nil {
  634. templ_7745c5c3_Var29 = templ.NopComponent
  635. }
  636. ctx = templ.ClearChildren(ctx)
  637. var templ_7745c5c3_Var30 = []any{maintenance.GetTaskIcon(taskType) + " me-1"}
  638. templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var30...)
  639. if templ_7745c5c3_Err != nil {
  640. return templ_7745c5c3_Err
  641. }
  642. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "<i class=\"")
  643. if templ_7745c5c3_Err != nil {
  644. return templ_7745c5c3_Err
  645. }
  646. var templ_7745c5c3_Var31 string
  647. templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var30).String())
  648. if templ_7745c5c3_Err != nil {
  649. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 1, Col: 0}
  650. }
  651. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
  652. if templ_7745c5c3_Err != nil {
  653. return templ_7745c5c3_Err
  654. }
  655. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "\"></i>")
  656. if templ_7745c5c3_Err != nil {
  657. return templ_7745c5c3_Err
  658. }
  659. return nil
  660. })
  661. }
  662. func PriorityBadge(priority maintenance.MaintenanceTaskPriority) templ.Component {
  663. return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
  664. templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
  665. if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
  666. return templ_7745c5c3_CtxErr
  667. }
  668. templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
  669. if !templ_7745c5c3_IsBuffer {
  670. defer func() {
  671. templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
  672. if templ_7745c5c3_Err == nil {
  673. templ_7745c5c3_Err = templ_7745c5c3_BufErr
  674. }
  675. }()
  676. }
  677. ctx = templ.InitializeContext(ctx)
  678. templ_7745c5c3_Var32 := templ.GetChildren(ctx)
  679. if templ_7745c5c3_Var32 == nil {
  680. templ_7745c5c3_Var32 = templ.NopComponent
  681. }
  682. ctx = templ.ClearChildren(ctx)
  683. switch priority {
  684. case maintenance.PriorityCritical:
  685. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "<span class=\"badge bg-danger\">Critical</span>")
  686. if templ_7745c5c3_Err != nil {
  687. return templ_7745c5c3_Err
  688. }
  689. case maintenance.PriorityHigh:
  690. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "<span class=\"badge bg-warning\">High</span>")
  691. if templ_7745c5c3_Err != nil {
  692. return templ_7745c5c3_Err
  693. }
  694. case maintenance.PriorityNormal:
  695. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "<span class=\"badge bg-primary\">Normal</span>")
  696. if templ_7745c5c3_Err != nil {
  697. return templ_7745c5c3_Err
  698. }
  699. case maintenance.PriorityLow:
  700. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "<span class=\"badge bg-secondary\">Low</span>")
  701. if templ_7745c5c3_Err != nil {
  702. return templ_7745c5c3_Err
  703. }
  704. default:
  705. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "<span class=\"badge bg-light text-dark\">Unknown</span>")
  706. if templ_7745c5c3_Err != nil {
  707. return templ_7745c5c3_Err
  708. }
  709. }
  710. return nil
  711. })
  712. }
  713. func StatusBadge(status maintenance.MaintenanceTaskStatus) templ.Component {
  714. return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
  715. templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
  716. if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
  717. return templ_7745c5c3_CtxErr
  718. }
  719. templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
  720. if !templ_7745c5c3_IsBuffer {
  721. defer func() {
  722. templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
  723. if templ_7745c5c3_Err == nil {
  724. templ_7745c5c3_Err = templ_7745c5c3_BufErr
  725. }
  726. }()
  727. }
  728. ctx = templ.InitializeContext(ctx)
  729. templ_7745c5c3_Var33 := templ.GetChildren(ctx)
  730. if templ_7745c5c3_Var33 == nil {
  731. templ_7745c5c3_Var33 = templ.NopComponent
  732. }
  733. ctx = templ.ClearChildren(ctx)
  734. switch status {
  735. case maintenance.TaskStatusPending:
  736. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<span class=\"badge bg-secondary\">Pending</span>")
  737. if templ_7745c5c3_Err != nil {
  738. return templ_7745c5c3_Err
  739. }
  740. case maintenance.TaskStatusAssigned:
  741. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "<span class=\"badge bg-info\">Assigned</span>")
  742. if templ_7745c5c3_Err != nil {
  743. return templ_7745c5c3_Err
  744. }
  745. case maintenance.TaskStatusInProgress:
  746. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "<span class=\"badge bg-warning\">Running</span>")
  747. if templ_7745c5c3_Err != nil {
  748. return templ_7745c5c3_Err
  749. }
  750. case maintenance.TaskStatusCompleted:
  751. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "<span class=\"badge bg-success\">Completed</span>")
  752. if templ_7745c5c3_Err != nil {
  753. return templ_7745c5c3_Err
  754. }
  755. case maintenance.TaskStatusFailed:
  756. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "<span class=\"badge bg-danger\">Failed</span>")
  757. if templ_7745c5c3_Err != nil {
  758. return templ_7745c5c3_Err
  759. }
  760. case maintenance.TaskStatusCancelled:
  761. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "<span class=\"badge bg-light text-dark\">Cancelled</span>")
  762. if templ_7745c5c3_Err != nil {
  763. return templ_7745c5c3_Err
  764. }
  765. default:
  766. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<span class=\"badge bg-light text-dark\">Unknown</span>")
  767. if templ_7745c5c3_Err != nil {
  768. return templ_7745c5c3_Err
  769. }
  770. }
  771. return nil
  772. })
  773. }
  774. func ProgressBar(progress float64, status maintenance.MaintenanceTaskStatus) templ.Component {
  775. return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
  776. templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
  777. if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
  778. return templ_7745c5c3_CtxErr
  779. }
  780. templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
  781. if !templ_7745c5c3_IsBuffer {
  782. defer func() {
  783. templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
  784. if templ_7745c5c3_Err == nil {
  785. templ_7745c5c3_Err = templ_7745c5c3_BufErr
  786. }
  787. }()
  788. }
  789. ctx = templ.InitializeContext(ctx)
  790. templ_7745c5c3_Var34 := templ.GetChildren(ctx)
  791. if templ_7745c5c3_Var34 == nil {
  792. templ_7745c5c3_Var34 = templ.NopComponent
  793. }
  794. ctx = templ.ClearChildren(ctx)
  795. if status == maintenance.TaskStatusInProgress || status == maintenance.TaskStatusAssigned {
  796. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "<div class=\"progress\" style=\"height: 8px; min-width: 100px;\"><div class=\"progress-bar\" role=\"progressbar\" style=\"")
  797. if templ_7745c5c3_Err != nil {
  798. return templ_7745c5c3_Err
  799. }
  800. var templ_7745c5c3_Var35 string
  801. templ_7745c5c3_Var35, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues(fmt.Sprintf("width: %.1f%%", progress))
  802. if templ_7745c5c3_Err != nil {
  803. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 390, Col: 102}
  804. }
  805. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
  806. if templ_7745c5c3_Err != nil {
  807. return templ_7745c5c3_Err
  808. }
  809. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "\"></div></div><small class=\"text-muted\">")
  810. if templ_7745c5c3_Err != nil {
  811. return templ_7745c5c3_Err
  812. }
  813. var templ_7745c5c3_Var36 string
  814. templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%.1f%%", progress))
  815. if templ_7745c5c3_Err != nil {
  816. return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/maintenance_queue.templ`, Line: 393, Col: 66}
  817. }
  818. _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
  819. if templ_7745c5c3_Err != nil {
  820. return templ_7745c5c3_Err
  821. }
  822. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "</small>")
  823. if templ_7745c5c3_Err != nil {
  824. return templ_7745c5c3_Err
  825. }
  826. } else if status == maintenance.TaskStatusCompleted {
  827. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "<div class=\"progress\" style=\"height: 8px; min-width: 100px;\"><div class=\"progress-bar bg-success\" role=\"progressbar\" style=\"width: 100%\"></div></div><small class=\"text-success\">100%</small>")
  828. if templ_7745c5c3_Err != nil {
  829. return templ_7745c5c3_Err
  830. }
  831. } else {
  832. templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<span class=\"text-muted\">-</span>")
  833. if templ_7745c5c3_Err != nil {
  834. return templ_7745c5c3_Err
  835. }
  836. }
  837. return nil
  838. })
  839. }
  840. func formatDuration(d time.Duration) string {
  841. if d < time.Minute {
  842. return fmt.Sprintf("%.0fs", d.Seconds())
  843. } else if d < time.Hour {
  844. return fmt.Sprintf("%.1fm", d.Minutes())
  845. } else {
  846. return fmt.Sprintf("%.1fh", d.Hours())
  847. }
  848. }
  849. func formatTimeAgo(t time.Time) string {
  850. duration := time.Since(t)
  851. if duration < time.Minute {
  852. return "just now"
  853. } else if duration < time.Hour {
  854. minutes := int(duration.Minutes())
  855. return fmt.Sprintf("%dm ago", minutes)
  856. } else if duration < 24*time.Hour {
  857. hours := int(duration.Hours())
  858. return fmt.Sprintf("%dh ago", hours)
  859. } else {
  860. days := int(duration.Hours() / 24)
  861. return fmt.Sprintf("%dd ago", days)
  862. }
  863. }
  864. var _ = templruntime.GeneratedTemplate