github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/dashboard/dashboardevents/dashboard_changed.go (about) 1 package dashboardevents 2 3 import ( 4 "github.com/turbot/steampipe/pkg/steampipeconfig/modconfig" 5 ) 6 7 type DashboardChanged struct { 8 ChangedDashboards []*modconfig.DashboardTreeItemDiffs 9 ChangedContainers []*modconfig.DashboardTreeItemDiffs 10 ChangedControls []*modconfig.DashboardTreeItemDiffs 11 ChangedBenchmarks []*modconfig.DashboardTreeItemDiffs 12 ChangedCategories []*modconfig.DashboardTreeItemDiffs 13 ChangedCards []*modconfig.DashboardTreeItemDiffs 14 ChangedCharts []*modconfig.DashboardTreeItemDiffs 15 ChangedFlows []*modconfig.DashboardTreeItemDiffs 16 ChangedGraphs []*modconfig.DashboardTreeItemDiffs 17 ChangedHierarchies []*modconfig.DashboardTreeItemDiffs 18 ChangedImages []*modconfig.DashboardTreeItemDiffs 19 ChangedInputs []*modconfig.DashboardTreeItemDiffs 20 ChangedTables []*modconfig.DashboardTreeItemDiffs 21 ChangedTexts []*modconfig.DashboardTreeItemDiffs 22 ChangedNodes []*modconfig.DashboardTreeItemDiffs 23 ChangedEdges []*modconfig.DashboardTreeItemDiffs 24 25 NewDashboards []*modconfig.Dashboard 26 NewContainers []*modconfig.DashboardContainer 27 NewControls []*modconfig.Control 28 NewBenchmarks []*modconfig.Benchmark 29 NewCards []*modconfig.DashboardCard 30 NewCategories []*modconfig.DashboardCategory 31 NewCharts []*modconfig.DashboardChart 32 NewFlows []*modconfig.DashboardFlow 33 NewGraphs []*modconfig.DashboardGraph 34 NewHierarchies []*modconfig.DashboardHierarchy 35 NewImages []*modconfig.DashboardImage 36 NewInputs []*modconfig.DashboardInput 37 NewTables []*modconfig.DashboardTable 38 NewTexts []*modconfig.DashboardText 39 NewNodes []*modconfig.DashboardNode 40 NewEdges []*modconfig.DashboardEdge 41 42 DeletedDashboards []*modconfig.Dashboard 43 DeletedContainers []*modconfig.DashboardContainer 44 DeletedControls []*modconfig.Control 45 DeletedBenchmarks []*modconfig.Benchmark 46 DeletedCards []*modconfig.DashboardCard 47 DeletedCategories []*modconfig.DashboardCategory 48 DeletedCharts []*modconfig.DashboardChart 49 DeletedFlows []*modconfig.DashboardFlow 50 DeletedGraphs []*modconfig.DashboardGraph 51 DeletedHierarchies []*modconfig.DashboardHierarchy 52 DeletedImages []*modconfig.DashboardImage 53 DeletedInputs []*modconfig.DashboardInput 54 DeletedTables []*modconfig.DashboardTable 55 DeletedTexts []*modconfig.DashboardText 56 DeletedNodes []*modconfig.DashboardNode 57 DeletedEdges []*modconfig.DashboardEdge 58 } 59 60 // IsDashboardEvent implements DashboardEvent interface 61 func (*DashboardChanged) IsDashboardEvent() {} 62 63 func (c *DashboardChanged) HasChanges() bool { 64 return len(c.ChangedDashboards)+ 65 len(c.ChangedContainers)+ 66 len(c.ChangedBenchmarks)+ 67 len(c.ChangedControls)+ 68 len(c.ChangedCards)+ 69 len(c.ChangedCategories)+ 70 len(c.ChangedCharts)+ 71 len(c.ChangedFlows)+ 72 len(c.ChangedGraphs)+ 73 len(c.ChangedHierarchies)+ 74 len(c.ChangedImages)+ 75 len(c.ChangedInputs)+ 76 len(c.ChangedTables)+ 77 len(c.ChangedTexts)+ 78 len(c.ChangedNodes)+ 79 len(c.ChangedEdges)+ 80 len(c.NewDashboards)+ 81 len(c.NewContainers)+ 82 len(c.NewBenchmarks)+ 83 len(c.NewControls)+ 84 len(c.NewCards)+ 85 len(c.NewCategories)+ 86 len(c.NewCharts)+ 87 len(c.NewFlows)+ 88 len(c.NewGraphs)+ 89 len(c.NewHierarchies)+ 90 len(c.NewImages)+ 91 len(c.NewInputs)+ 92 len(c.NewTables)+ 93 len(c.NewTexts)+ 94 len(c.NewNodes)+ 95 len(c.NewEdges)+ 96 len(c.DeletedDashboards)+ 97 len(c.DeletedContainers)+ 98 len(c.DeletedBenchmarks)+ 99 len(c.DeletedControls)+ 100 len(c.DeletedCards)+ 101 len(c.DeletedCategories)+ 102 len(c.DeletedCharts)+ 103 len(c.DeletedFlows)+ 104 len(c.DeletedGraphs)+ 105 len(c.DeletedHierarchies)+ 106 len(c.DeletedImages)+ 107 len(c.DeletedInputs)+ 108 len(c.DeletedTables)+ 109 len(c.DeletedTexts)+ 110 len(c.DeletedNodes)+ 111 len(c.DeletedEdges) > 0 112 } 113 114 func (c *DashboardChanged) WalkChangedResources(resourceFunc func(item modconfig.ModTreeItem) (bool, error)) error { 115 for _, r := range c.ChangedDashboards { 116 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 117 return err 118 } 119 } 120 for _, r := range c.ChangedContainers { 121 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 122 return err 123 } 124 } 125 for _, r := range c.ChangedControls { 126 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 127 return err 128 } 129 } 130 for _, r := range c.ChangedCards { 131 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 132 return err 133 } 134 } 135 for _, r := range c.ChangedCategories { 136 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 137 return err 138 } 139 } 140 for _, r := range c.ChangedCharts { 141 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 142 return err 143 } 144 } 145 for _, r := range c.ChangedFlows { 146 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 147 return err 148 } 149 } 150 for _, r := range c.ChangedGraphs { 151 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 152 return err 153 } 154 } 155 for _, r := range c.ChangedHierarchies { 156 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 157 return err 158 } 159 } 160 for _, r := range c.ChangedImages { 161 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 162 return err 163 } 164 } 165 for _, r := range c.ChangedInputs { 166 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 167 return err 168 } 169 } 170 for _, r := range c.ChangedTables { 171 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 172 return err 173 } 174 } 175 for _, r := range c.ChangedTexts { 176 if continueWalking, err := resourceFunc(r.Item); err != nil || !continueWalking { 177 return err 178 } 179 } 180 for _, r := range c.NewDashboards { 181 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 182 return err 183 } 184 } 185 for _, r := range c.NewContainers { 186 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 187 return err 188 } 189 } 190 for _, r := range c.NewControls { 191 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 192 return err 193 } 194 } 195 for _, r := range c.NewCards { 196 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 197 return err 198 } 199 } 200 for _, r := range c.NewCategories { 201 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 202 return err 203 } 204 } 205 for _, r := range c.NewCharts { 206 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 207 return err 208 } 209 } 210 for _, r := range c.NewFlows { 211 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 212 return err 213 } 214 } 215 for _, r := range c.NewGraphs { 216 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 217 return err 218 } 219 } 220 for _, r := range c.NewHierarchies { 221 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 222 return err 223 } 224 } 225 for _, r := range c.NewImages { 226 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 227 return err 228 } 229 } 230 for _, r := range c.NewInputs { 231 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 232 return err 233 } 234 } 235 for _, r := range c.NewTables { 236 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 237 return err 238 } 239 } 240 for _, r := range c.NewTexts { 241 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 242 return err 243 } 244 } 245 for _, r := range c.DeletedContainers { 246 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 247 return err 248 } 249 } 250 for _, r := range c.DeletedControls { 251 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 252 return err 253 } 254 } 255 for _, r := range c.DeletedCards { 256 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 257 return err 258 } 259 } 260 for _, r := range c.DeletedCategories { 261 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 262 return err 263 } 264 } 265 for _, r := range c.DeletedCharts { 266 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 267 return err 268 } 269 } 270 for _, r := range c.DeletedFlows { 271 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 272 return err 273 } 274 } 275 for _, r := range c.DeletedGraphs { 276 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 277 return err 278 } 279 } 280 for _, r := range c.DeletedHierarchies { 281 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 282 return err 283 } 284 } 285 for _, r := range c.DeletedImages { 286 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 287 return err 288 } 289 } 290 for _, r := range c.DeletedInputs { 291 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 292 return err 293 } 294 } 295 for _, r := range c.DeletedTables { 296 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 297 return err 298 } 299 } 300 for _, r := range c.DeletedTexts { 301 if continueWalking, err := resourceFunc(r); err != nil || !continueWalking { 302 return err 303 } 304 } 305 306 return nil 307 } 308 309 func (c *DashboardChanged) SetParentsChanged(item modconfig.ModTreeItem, prevResourceMaps *modconfig.ResourceMaps) { 310 if prevResourceMaps == nil { 311 return 312 } 313 314 parents := item.GetParents() 315 for _, parent := range parents { 316 // if the parent DID NOT exist in the previous resource maps, do nothing 317 parsedResourceName, _ := modconfig.ParseResourceName(parent.Name()) 318 if _, existingResource := prevResourceMaps.GetResource(parsedResourceName); existingResource { 319 c.AddChanged(parent) 320 c.SetParentsChanged(parent, prevResourceMaps) 321 } 322 } 323 } 324 325 func (c *DashboardChanged) diffsContain(diffs []*modconfig.DashboardTreeItemDiffs, item modconfig.ModTreeItem) bool { 326 for _, d := range diffs { 327 if d.Item.Name() == item.Name() { 328 return true 329 } 330 } 331 return false 332 } 333 334 func (c *DashboardChanged) AddChanged(item modconfig.ModTreeItem) { 335 diff := &modconfig.DashboardTreeItemDiffs{ 336 Name: item.Name(), 337 Item: item, 338 ChangedProperties: []string{"Children"}, 339 } 340 switch item.(type) { 341 case *modconfig.Dashboard: 342 if !c.diffsContain(c.ChangedDashboards, item) { 343 c.ChangedDashboards = append(c.ChangedDashboards, diff) 344 } 345 case *modconfig.DashboardContainer: 346 if !c.diffsContain(c.ChangedContainers, item) { 347 c.ChangedContainers = append(c.ChangedContainers, diff) 348 } 349 case *modconfig.Control: 350 if !c.diffsContain(c.ChangedControls, item) { 351 c.ChangedControls = append(c.ChangedControls, diff) 352 } 353 case *modconfig.Benchmark: 354 if !c.diffsContain(c.ChangedBenchmarks, item) { 355 c.ChangedBenchmarks = append(c.ChangedBenchmarks, diff) 356 } 357 case *modconfig.DashboardCard: 358 if !c.diffsContain(c.ChangedCards, item) { 359 c.ChangedCards = append(c.ChangedCards, diff) 360 } 361 case *modconfig.DashboardCategory: 362 if !c.diffsContain(c.ChangedCategories, item) { 363 c.ChangedCategories = append(c.ChangedCategories, diff) 364 } 365 case *modconfig.DashboardChart: 366 if !c.diffsContain(c.ChangedCharts, item) { 367 c.ChangedCharts = append(c.ChangedCharts, diff) 368 } 369 case *modconfig.DashboardHierarchy: 370 if !c.diffsContain(c.ChangedHierarchies, item) { 371 c.ChangedHierarchies = append(c.ChangedHierarchies, diff) 372 } 373 374 case *modconfig.DashboardImage: 375 if !c.diffsContain(c.ChangedImages, item) { 376 c.ChangedImages = append(c.ChangedImages, diff) 377 } 378 379 case *modconfig.DashboardInput: 380 if !c.diffsContain(c.ChangedInputs, item) { 381 c.ChangedInputs = append(c.ChangedInputs, diff) 382 } 383 384 case *modconfig.DashboardTable: 385 if !c.diffsContain(c.ChangedTables, item) { 386 c.ChangedTables = append(c.ChangedTables, diff) 387 } 388 case *modconfig.DashboardText: 389 if !c.diffsContain(c.ChangedTexts, item) { 390 c.ChangedTexts = append(c.ChangedTexts, diff) 391 } 392 } 393 }