|
1 | 1 | package discoveries |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "os" |
| 5 | + "path" |
| 6 | + |
4 | 7 | "github.com/gofiber/fiber/v2" |
5 | 8 | "github.com/google/uuid" |
6 | 9 | "github.com/limanmys/inventory-server/app/entities" |
| 10 | + "github.com/limanmys/inventory-server/internal/constants" |
7 | 11 | "github.com/limanmys/inventory-server/internal/database" |
8 | 12 | "github.com/limanmys/inventory-server/internal/paginator" |
9 | 13 | "github.com/limanmys/inventory-server/internal/search" |
@@ -36,28 +40,50 @@ func Create(c *fiber.Ctx) error { |
36 | 40 | return err |
37 | 41 | } |
38 | 42 |
|
| 43 | + // Set run id |
| 44 | + runID := uuid.New().String() |
| 45 | + |
| 46 | + // Create discovery logs record |
| 47 | + if err := database.Connection().Create(&entities.DiscoveryLogs{ |
| 48 | + DiscoveryID: payload.ID, |
| 49 | + Filename: runID, |
| 50 | + }).Error; err != nil { |
| 51 | + return err |
| 52 | + } |
| 53 | + |
39 | 54 | // Start discovery |
40 | | - go discovery.Start(payload) |
| 55 | + go discovery.Start(payload, runID) |
41 | 56 |
|
42 | 57 | return c.JSON(payload) |
43 | 58 | } |
44 | 59 |
|
45 | 60 | // Run, runs a discovery |
46 | 61 | func Run(c *fiber.Ctx) error { |
47 | 62 | // Check uuid validity |
48 | | - uuid, err := uuid.Parse(c.Params("id")) |
| 63 | + uid, err := uuid.Parse(c.Params("id")) |
49 | 64 | if err != nil { |
50 | 65 | return err |
51 | 66 | } |
52 | 67 |
|
53 | 68 | // Get discovery |
54 | 69 | var discoveryObject entities.Discovery |
55 | | - if err := database.Connection().Model(&entities.Discovery{}).Where("id = ?", uuid).First(&discoveryObject).Error; err != nil { |
| 70 | + if err := database.Connection().Model(&entities.Discovery{}).Where("id = ?", uid).First(&discoveryObject).Error; err != nil { |
| 71 | + return err |
| 72 | + } |
| 73 | + |
| 74 | + // Set run id |
| 75 | + runID := uuid.New().String() |
| 76 | + |
| 77 | + // Create discovery logs record |
| 78 | + if err := database.Connection().Create(&entities.DiscoveryLogs{ |
| 79 | + DiscoveryID: discoveryObject.ID, |
| 80 | + Filename: runID, |
| 81 | + }).Error; err != nil { |
56 | 82 | return err |
57 | 83 | } |
58 | 84 |
|
59 | 85 | // Start discovery |
60 | | - go discovery.Start(discoveryObject) |
| 86 | + go discovery.Start(discoveryObject, runID) |
61 | 87 |
|
62 | 88 | return c.JSON("Discovery started successfully.") |
63 | 89 | } |
@@ -101,3 +127,27 @@ func Delete(c *fiber.Ctx) error { |
101 | 127 |
|
102 | 128 | return c.JSON("Record deleted successfully.") |
103 | 129 | } |
| 130 | + |
| 131 | +// ReadLog, Reads a latest log file |
| 132 | +func ReadLatestLog(c *fiber.Ctx) error { |
| 133 | + // Check uuid validity |
| 134 | + uuid, err := uuid.Parse(c.Params("id")) |
| 135 | + if err != nil { |
| 136 | + return err |
| 137 | + } |
| 138 | + |
| 139 | + // Get logs |
| 140 | + var log entities.DiscoveryLogs |
| 141 | + if err := database.Connection().Model(&entities.DiscoveryLogs{}). |
| 142 | + Where("discovery_id = ?", uuid).Order("updated_at DESC").First(&log).Error; err != nil { |
| 143 | + return err |
| 144 | + } |
| 145 | + |
| 146 | + // Read content |
| 147 | + content, err := os.ReadFile(path.Join(constants.DEFAULT_LOG_PATH, log.Filename)) |
| 148 | + if err != nil { |
| 149 | + return err |
| 150 | + } |
| 151 | + |
| 152 | + return c.JSON(fiber.Map{"content": string(content)}) |
| 153 | +} |
0 commit comments