Skip to content

Commit

Permalink
--print-snapshot
Browse files Browse the repository at this point in the history
Summary: This is handy to print snapshots downloaded from Skycastle artifacts. There is no convenient way to do it otherwise since they are gzipped and binary encoded

Reviewed By: nhawkes

Differential Revision: D51196773

fbshipit-source-id: 1e1d75a76eb2644241bea55c7b2c7b3cbc50113d
  • Loading branch information
Pepe Iborra authored and facebook-github-bot committed Nov 10, 2023
1 parent f12c227 commit c2c2cd4
Showing 1 changed file with 30 additions and 7 deletions.
37 changes: 30 additions & 7 deletions glean/glass/Glean/Glass/Snapshot.hs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import Control.Monad (forM, when)
import qualified Data.ByteString as BS
import Data.Default (def)
import Data.Int (Int64)
import Data.Foldable (asum)
import Data.Maybe (fromMaybe, catMaybes)
import Data.Proxy (Proxy (..))
import Data.Text (Text, pack, unpack)
Expand Down Expand Up @@ -56,15 +57,15 @@ import System.Directory (createDirectoryIfMissing)
import System.Environment (lookupEnv)
import System.Exit (exitWith, ExitCode (ExitFailure))
import System.FilePath ((</>), joinPath, splitDirectories, takeDirectory)
import Thrift.Protocol (serializeGen)
import Thrift.Protocol (serializeGen, deserializeGen)
import Thrift.Protocol.Compact (Compact)
import Text.Printf
import TextShow

import Facebook.Db (InstanceRequirement (Master), withConnection)
import qualified Logger.GleanDiffTimeCoverage as Logger
import Util.Log.String (logError, logInfo, logWarning)
import Codec.Compression.GZip (compress)
import Codec.Compression.GZip (compress, decompress)

import qualified Glean
import qualified Glean.Glass.Env as Glass
Expand Down Expand Up @@ -162,10 +163,19 @@ configParser =
optRev <*> snapshotTierParser <*> thresholdParser <*> gleanDBNameParser <*>
(not <$> compressParser) <*> phabricatorVersionParser

options :: ParserInfo Config
options = info (helper <*> configParser) (fullDesc <>
progDesc ("pre-computes the DocumentSymbolListX results for input files, "
<> "and upload to XDB tier"))
options :: ParserInfo (Either Config FilePath)
options = info (helper <*> parser) desc
where
parser = asum
[
Left <$> configParser,
Right <$> printSnapshotParser
]
printSnapshotParser = strOption (long "print-snapshot")
desc =
fullDesc <>
progDesc ("pre-computes the DocumentSymbolListX results for input files, "
<> "and upload to XDB tier")

data BuildSnapshot = BuildSnapshot
{
Expand Down Expand Up @@ -279,7 +289,12 @@ uploadToXdb

main :: IO ()
main =
withOptions options $ \_config@Config{..} ->
withOptions options $ \case
Left config -> realMain config
Right snapshotPath -> printSnapshot snapshotPath

realMain :: Config -> IO ()
realMain _config@Config{..} =
withEnv
(Glass.serviceName glassConfig)
(Glass.gleanService glassConfig)
Expand Down Expand Up @@ -358,3 +373,11 @@ isFatalError = \case
InsertError{} -> True
UploadError{} -> True
AlreadyPresent -> False

printSnapshot :: FilePath -> IO ()
printSnapshot path = do
bytes <- BS.readFile path
let decomp = toStrict $ decompress $ fromStrict bytes
deser :: Either String Types.Snapshot
deser = deserializeGen (Proxy :: Proxy Compact) decomp
either error print deser

0 comments on commit c2c2cd4

Please sign in to comment.