这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/graphql/manual/guides/telemetry.rst
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ Server
The server periodically sends the number of tables, views, relationships,
permission rules, custom SQL functions, event triggers and remote schemas
tracked by GraphQL Engine, along with randomly generated UUID per database and
per instance. The server version is also sent.
per instance. The name of the current continuous integration environment
(if any) and the server version is also sent.

Here is a sample row from the telemetry database:

Expand All @@ -45,6 +46,7 @@ Here is a sample row from the telemetry database:
"db_uid": "dddff371-dab2-450f-9969-235bca66dab1",
"instance_uid": "6799360d-a431-40c5-9f68-24592a9f07df",
"version": "v1.0.0-alpha36",
"ci": "TRAVIS",
"metrics": {
"views": 1,
"tables": 2,
Expand Down
3 changes: 3 additions & 0 deletions server/graphql-engine.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,9 @@ library
-- metrics in multiplexed subs
, ekg-core

-- metrics for CI integration
, ci-info

-- serve static files
, filepath >= 1.4
, mime-types >= 0.1
Expand Down
16 changes: 7 additions & 9 deletions server/src-lib/Hasura/Server/CheckUpdates.hs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ module Hasura.Server.CheckUpdates
import Control.Exception (try)
import Control.Lens
import Control.Monad (forever)
import System.Environment (lookupEnv)

import qualified CI
import qualified Control.Concurrent as C
import qualified Data.Aeson as A
import qualified Data.Aeson.Casing as A
Expand Down Expand Up @@ -47,14 +47,12 @@ checkForUpdates (LoggerCtx loggerSet _ _) manager = do
where
updateMsg v = "Update: A new version is available: " <> v
getUrl = do
let buildUrl a = "https://releases.hasura.io/graphql-engine?agent="
<> a
<> "&version="
<> currentVersion
isCI <- lookupEnv "CI"
case isCI of
Just "true" -> return $ buildUrl "server-ci"
_ -> return $ buildUrl "server"
let buildUrl agent = "https://releases.hasura.io/graphql-engine?agent=" <>
agent <> "&version=" <> currentVersion
ciM <- CI.getCI
return . buildUrl $ case ciM of
Nothing -> "server"
Just ci -> "server-" <> (T.toLower . T.pack $ show ci)

aDay = 86400 * 1000 * 1000

Expand Down
12 changes: 8 additions & 4 deletions server/src-lib/Hasura/Server/Telemetry.hs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import Hasura.Prelude
import Hasura.RQL.Types
import Hasura.Server.Version

import qualified CI
import qualified Control.Concurrent as C
import qualified Data.Aeson as A
import qualified Data.Aeson.Casing as A
Expand Down Expand Up @@ -72,6 +73,7 @@ data HasuraTelemetry
{ _htDbUid :: !Text
, _htInstanceUid :: !Text
, _htVersion :: !Text
, _htCi :: !(Maybe CI.CI)
, _htMetrics :: !Metrics
} deriving (Show, Eq)
$(A.deriveJSON (A.aesonDrop 3 A.snakeCase) ''HasuraTelemetry)
Expand All @@ -86,9 +88,11 @@ $(A.deriveJSON (A.aesonDrop 3 A.snakeCase) ''TelemetryPayload)
telemetryUrl :: Text
telemetryUrl = "https://telemetry.hasura.io/v1/http"

mkPayload :: Text -> Text -> Text -> Metrics -> TelemetryPayload
mkPayload dbId instanceId version metrics =
TelemetryPayload topic $ HasuraTelemetry dbId instanceId version metrics
mkPayload :: Text -> Text -> Text -> Metrics -> IO TelemetryPayload
mkPayload dbId instanceId version metrics = do
ci <- CI.getCI
return $ TelemetryPayload topic $
HasuraTelemetry dbId instanceId version ci metrics
where topic = bool "server" "server_test" isDevVersion

runTelemetry
Expand All @@ -102,7 +106,7 @@ runTelemetry (Logger logger) manager cacheRef (dbId, instanceId) = do
forever $ do
schemaCache <- fmap fst $ readIORef cacheRef
let metrics = computeMetrics schemaCache
payload = A.encode $ mkPayload dbId instanceId currentVersion metrics
payload <- A.encode <$> mkPayload dbId instanceId currentVersion metrics
logger $ debugLBS $ "metrics_info: " <> payload
resp <- try $ Wreq.postWith options (T.unpack telemetryUrl) payload
either logHttpEx handleHttpResp resp
Expand Down
2 changes: 2 additions & 0 deletions server/stack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ extra-deps:
commit: 85f9c2c15e4fa09f2e2a86dbb23149b5256bdd34
- git: https://github.com/hasura/graphql-parser-hs.git
commit: 39d175c5c7bca35ec04d13c92a39f600bd6413cf
- git: https://github.com/hasura/ci-info-hs.git
commit: ad6df731584dc89b72a6e131687d37ef01714fe8
- ginger-0.8.4.0

# extra dep for pg-client-hs
Expand Down