packages feed

glean-0.1.0.0: glean/server/Glean/Handler.hs

{-
  Copyright (c) Meta Platforms, Inc. and affiliates.
  All rights reserved.

  This source code is licensed under the BSD-style license found in the
  LICENSE file in the root directory of this source tree.
-}


module Glean.Handler
  ( State(..)
  , handler
  ) where

import Data.Maybe

import Facebook.Fb303

import Glean as Backend
import Glean.GleanService.Service as Service
import Glean.Backend.Local
import Glean.Backend.Logging
import qualified Glean.Types as Thrift

data State = State
  { fb303State :: Fb303State
  , stEnv :: Env
  }

handler :: State -> GleanServiceCommand a -> IO a
handler State{..} req =
  let backend = LoggingBackend stEnv in -- log (most) requests
  case req of
    Service.GetSchemaInfo repo req ->
      Backend.getSchemaInfo backend (Just repo) req

    Service.GetSchemaInfoForSchema req ->
      Backend.getSchemaInfo backend Nothing req

    Service.ValidateSchema req -> Backend.validateSchema backend req

    Service.SendBatch cbatch -> Backend.enqueueBatch backend cbatch

    Service.EnqueueBatch repo batch waitPolicy
      -> Backend.enqueueBatchDescriptor backend repo batch waitPolicy

    Service.FinishBatch handle -> Backend.pollBatch backend handle

    Service.SendJsonBatch repo batch ->
      Backend.enqueueJsonBatch backend repo batch

    Service.KickOff rq -> Backend.kickOffDatabase backend rq

    Service.Finish repo -> Backend.finishDatabase backend repo

    Service.Finalize repo -> Backend.finalizeDatabase backend repo

    Service.UpdateProperties repo set unset ->
      Backend.updateProperties backend repo set unset

    Service.QueryFact repo id ->
      fromMaybe (Thrift.Fact 0 mempty mempty) <$>
        Backend.queryFact backend repo id

    Service.FactIdRange repo -> Backend.factIdRange backend repo

    Service.UserQueryFacts repo req ->
      Backend.userQueryFacts backend repo req

    Service.UserQuery repo query ->
      Backend.userQuery backend repo query

    Service.UserQueryBatch repo queries -> do
      Backend.userQueryBatch backend repo queries

    Service.CompletePredicates repo preds ->
      Backend.completePredicates_ backend repo preds

    Service.DeriveStored repo pred ->
      Backend.deriveStored backend (const mempty) repo pred

    Service.PredicateStats repo Thrift.PredicateStatsOpts{..} ->
      Backend.predicateStats backend repo $
        if predicateStatsOpts_excludeBase then ExcludeBase else IncludeBase

    Service.ListDatabases l ->
      Backend.listDatabases backend l

    Service.GetDatabase repo -> Backend.getDatabase backend repo

    Service.DeleteDatabase repo -> Backend.deleteDatabase backend repo

    Service.Restore loc -> Backend.restoreDatabase backend loc

    SuperFacebookService c -> fb303Handler fb303State c