@@ -21,6 +21,7 @@ import App.Fossa.Ficus.Types (
2121 FicusMessageData (.. ),
2222 FicusMessages (.. ),
2323 FicusPerStrategyFlag (.. ),
24+ FicusScanStats (.. ),
2425 FicusSnippetScanResults (.. ),
2526 )
2627import App.Types (ProjectRevision (.. ))
@@ -29,8 +30,7 @@ import Control.Carrier.Diagnostics (Diagnostics)
2930import Control.Concurrent.Async (async , wait )
3031import Control.Effect.Lift (Has , Lift , sendIO )
3132import Control.Monad (when )
32- import Data.Aeson (Object , decode , decodeStrictText , (.:) )
33- import Data.Aeson.Types (parseMaybe )
33+ import Data.Aeson (decode , decodeStrictText )
3434import Data.ByteString.Lazy qualified as BL
3535import Data.Conduit ((.|) )
3636import Data.Conduit qualified as Conduit
@@ -64,6 +64,7 @@ import System.Process.Typed (
6464 waitExitCode ,
6565 withProcessWait ,
6666 )
67+ import Text.Printf (printf )
6768import Text.URI (render )
6869import Text.URI.Builder (PathComponent (PathComponent ), TrailingSlash (TrailingSlash ), setPath )
6970import Types (GlobFilter (.. ), LicenseScanPathFilters (.. ))
@@ -116,7 +117,7 @@ analyzeWithFicusMain rootDir apiOpts revision filters snippetScanRetentionDays m
116117 logDebugWithTime " runFicus completed, processing results..."
117118 case ficusResults of
118119 Just results ->
119- logInfo $ " Ficus analysis completed successfully with analysis ID: " <> pretty (ficusSnippetScanResultsAnalysisId results)
120+ logInfo $ pretty (formatFicusScanSummary results)
120121 Nothing -> logInfo " Ficus analysis completed but no fingerprint findings were found"
121122 pure ficusResults
122123 where
@@ -131,13 +132,37 @@ analyzeWithFicusMain rootDir apiOpts revision filters snippetScanRetentionDays m
131132 , ficusConfigSnippetScanRetentionDays = snippetScanRetentionDays
132133 }
133134
134- findingToAnalysisId :: FicusFinding -> Maybe Int
135- findingToAnalysisId (FicusFinding (FicusMessageData strategy payload))
135+ findingToSnippetScanResult :: FicusFinding -> Maybe FicusSnippetScanResults
136+ findingToSnippetScanResult (FicusFinding (FicusMessageData strategy payload))
136137 | Text. toLower strategy == " fingerprint" =
137- case decode (BL. fromStrict $ Text.Encoding. encodeUtf8 payload) :: Maybe Object of
138- Just obj -> parseMaybe (.: " analysis_id" ) obj
139- Nothing -> Nothing
140- findingToAnalysisId _ = Nothing
138+ decode (BL. fromStrict $ Text.Encoding. encodeUtf8 payload)
139+ findingToSnippetScanResult _ = Nothing
140+
141+ formatFicusScanSummary :: FicusSnippetScanResults -> Text
142+ formatFicusScanSummary results =
143+ let stats = ficusSnippetScanResultsStats results
144+ aid = ficusSnippetScanResultsAnalysisId results
145+ in Text. unlines
146+ [ " Ficus snippet scan completed successfully!"
147+ , " "
148+ , " ============================================================"
149+ , " Snippet scan summary:"
150+ , " Analysis ID: " <> toText (show aid)
151+ , " Bucket ID: " <> toText (show $ ficusSnippetScanResultsBucketId results)
152+ , " Files skipped: " <> toText (show $ ficusStatsSkippedFiles stats)
153+ , " Total Files processed: " <> toText (show $ ficusStatsProcessedFiles stats)
154+ , " Unique Files processed: " <> toText (show $ ficusStatsUniqueProcessedFiles stats)
155+ , " Unique Files with matches found: " <> toText (show $ ficusStatsUniqueMatchedFiles stats)
156+ , " Unique Files with no matches found: " <> toText (show $ ficusStatsUniqueUnmatchedFiles stats)
157+ , " Unique Files already in our knowledge base: " <> toText (show $ ficusStatsUniqueExistingFiles stats)
158+ , " Unique Files new to our knowledge base: " <> toText (show $ ficusStatsUniqueNewFiles stats)
159+ , " Processing time: " <> formatProcessingTime (ficusStatsProcessingTimeSeconds stats) <> " s"
160+ , " ============================================================"
161+ ]
162+ where
163+ -- Format the processing time as a string with 3 decimal places
164+ formatProcessingTime :: Double -> Text
165+ formatProcessingTime seconds = toText (printf " %.3f" seconds :: String )
141166
142167runFicus ::
143168 ( Has Diagnostics sig m
@@ -236,10 +261,10 @@ runFicus maybeDebugDir ficusConfig = do
236261 pure acc
237262 FicusMessageFinding finding -> do
238263 hPutStrLn stderr $ " [" ++ timestamp ++ " ] FINDING " <> toString (displayFicusFinding finding)
239- let analysisFinding = FicusSnippetScanResults <$> findingToAnalysisId finding
264+ let analysisFinding = findingToSnippetScanResult finding
240265 when (isJust acc && isJust analysisFinding) $
241266 hPutStrLn stderr $
242- " [" ++ timestamp ++ " ] ERROR " <> " Found multiple analysis ids ."
267+ " [" ++ timestamp ++ " ] ERROR " <> " Found multiple ficus analysis responses ."
243268 pure $ acc <|> analysisFinding
244269 )
245270 Nothing
0 commit comments