Sometimes flows are deleted but there is still outstanding data for them in flight. The server will continue to save this data after the flow is deleted.
This happens when a hunt is deleted (thereby deleting all its flows) but there are in flight collections still outstanding.
name: Server.Utils.OrphanedFlows
description: |
Sometimes flows are deleted but there is still outstanding data for
them in flight. The server will continue to save this data after the
flow is deleted.
This happens when a hunt is deleted (thereby deleting all its flows)
but there are in flight collections still outstanding.
type: SERVER
sources:
- query: |
-- Calculate the space taken by each file (Does not count directories)
LET _Du(OSPath, Accessor) =
SELECT sum(item=Size) AS Sum
FROM glob(globs="/**", root=OSPath, accessor=Accessor)
GROUP BY 1
LET Du(OSPath, Accessor) = _Du(OSPath=OSPath, Accessor=Accessor)[0].Sum
-- Get all collection directories (that contain uploads, monitoring etc).
LET FlowDirs =
SELECT OSPath,
OSPath[-1] AS FlowID, OSPath[-3] AS ClientId
FROM glob(globs="/clients/*/collections/*", accessor="fs")
WHERE NOT FlowID =~ ".db"
-- An OrphanedFlows is a flow that does not have a metadata record
-- but still has some data.
LET OrphanedFlows = SELECT file_store(path=OSPath.String) AS Path,
ClientId, FlowID, {
SELECT * FROM flows(client_id=ClientId, flow_id=FlowID)
} AS Details, Du(OSPath=OSPath, Accessor="fs") AS Size
FROM FlowDirs
WHERE NOT Details AND Size > 0
ORDER BY Size DESC
SELECT Path, ClientId, FlowID, Size, humanize(bytes=Size) AS HumanSize
FROM OrphanedFlows