mirror of
https://github.com/simplex-chat/simplexmq.git
synced 2026-09-17 12:27:16 +00:00
* explicit exports * more empty exports * add exports * reorder * use correct ControlProtocol type for xftp router --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
139 lines
5.1 KiB
Haskell
139 lines
5.1 KiB
Haskell
{-# LANGUAGE DuplicateRecordFields #-}
|
|
{-# LANGUAGE NamedFieldPuns #-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
{-# LANGUAGE TypeApplications #-}
|
|
{-# OPTIONS_GHC -fno-warn-unrecognised-pragmas #-}
|
|
|
|
module Simplex.FileTransfer.Server.Prometheus
|
|
( FileServerMetrics (..),
|
|
rtsOptionsEnv,
|
|
xftpPrometheusMetrics,
|
|
) where
|
|
|
|
import Data.Int (Int64)
|
|
import Data.Text (Text)
|
|
import qualified Data.Text as T
|
|
import Data.Time.Clock (UTCTime (..), diffUTCTime)
|
|
import Data.Time.Clock.System (systemEpochDay)
|
|
import Data.Time.Format.ISO8601 (iso8601Show)
|
|
import Simplex.FileTransfer.Server.Stats
|
|
import Simplex.Messaging.Server.Stats (PeriodStatCounts (..))
|
|
import Simplex.Messaging.Transport (simplexMQVersion)
|
|
import Simplex.Messaging.Util (tshow)
|
|
|
|
data FileServerMetrics = FileServerMetrics
|
|
{ statsData :: FileServerStatsData,
|
|
filesDownloadedPeriods :: PeriodStatCounts,
|
|
rtsOptions :: Text
|
|
}
|
|
|
|
rtsOptionsEnv :: Text
|
|
rtsOptionsEnv = "XFTP_RTS_OPTIONS"
|
|
|
|
{-# FOURMOLU_DISABLE\n#-}
|
|
xftpPrometheusMetrics :: FileServerMetrics -> UTCTime -> Text
|
|
xftpPrometheusMetrics sm ts =
|
|
time <> files <> info
|
|
where
|
|
FileServerMetrics {statsData, filesDownloadedPeriods, rtsOptions} = sm
|
|
FileServerStatsData
|
|
{ _fromTime,
|
|
_filesCreated,
|
|
_fileRecipients,
|
|
_filesUploaded,
|
|
_filesExpired,
|
|
_filesDeleted,
|
|
_filesBlocked,
|
|
_fileDownloads,
|
|
_fileDownloadAcks,
|
|
_filesCount,
|
|
_filesSize
|
|
} = statsData
|
|
time =
|
|
"# Recorded at: " <> T.pack (iso8601Show ts) <> "\n\
|
|
\# Stats from: " <> T.pack (iso8601Show _fromTime) <> "\n\
|
|
\\n"
|
|
files =
|
|
"# Files\n\
|
|
\# -----\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_files_created Created files\n\
|
|
\# TYPE simplex_xftp_files_created counter\n\
|
|
\simplex_xftp_files_created " <> mshow _filesCreated <> "\n\
|
|
\# filesCreated\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_files_recipients Files recipients\n\
|
|
\# TYPE simplex_xftp_files_recipients counter\n\
|
|
\simplex_xftp_files_recipients " <> mshow _fileRecipients <> "\n\
|
|
\# fileRecipients\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_files_uploaded Uploaded files\n\
|
|
\# TYPE simplex_xftp_files_uploaded counter\n\
|
|
\simplex_xftp_files_uploaded " <> mshow _filesUploaded <> "\n\
|
|
\# filesUploaded\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_files_expired Expired files\n\
|
|
\# TYPE simplex_xftp_files_expired counter\n\
|
|
\simplex_xftp_files_expired " <> mshow _filesExpired <> "\n\
|
|
\# filesExpired\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_files_deleted Deleted files\n\
|
|
\# TYPE simplex_xftp_files_deleted counter\n\
|
|
\simplex_xftp_files_deleted " <> mshow _filesDeleted <> "\n\
|
|
\# filesDeleted\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_files_blocked Blocked files\n\
|
|
\# TYPE simplex_xftp_files_blocked counter\n\
|
|
\simplex_xftp_files_blocked " <> mshow _filesBlocked <> "\n\
|
|
\# filesBlocked\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_file_downloads File downloads\n\
|
|
\# TYPE simplex_xftp_file_downloads counter\n\
|
|
\simplex_xftp_file_downloads " <> mshow _fileDownloads <> "\n\
|
|
\# fileDownloads\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_file_download_acks File download ACKs\n\
|
|
\# TYPE simplex_xftp_file_download_acks counter\n\
|
|
\simplex_xftp_file_download_acks " <> mshow _fileDownloadAcks <> "\n\
|
|
\# fileDownloadAcks\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_files_count_total Total files count \n\
|
|
\# TYPE simplex_xftp_files_count_total gauge\n\
|
|
\simplex_xftp_files_count_total " <> mshow _filesCount <> "\n\
|
|
\# filesCount\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_files_size Size of files \n\
|
|
\# TYPE simplex_xftp_files_size gauge\n\
|
|
\simplex_xftp_files_size " <> mshow _filesSize <> "\n\
|
|
\# filesSize \n\
|
|
\\n\
|
|
\# HELP simplex_xftp_files_count_daily Daily files count\n\
|
|
\# TYPE simplex_xftp_files_count_daily gauge\n\
|
|
\simplex_xftp_files_count_daily " <> mstr (dayCount filesDownloadedPeriods) <> "\n\
|
|
\# filesDownloaded.dayCount\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_files_count_weekly Weekly files count\n\
|
|
\# TYPE simplex_xftp_files_count_weekly gauge\n\
|
|
\simplex_xftp_files_count_weekly " <> mstr (weekCount filesDownloadedPeriods) <> "\n\
|
|
\# filesDownloaded.weekCount\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_files_count_monthly Monthly files count\n\
|
|
\# TYPE simplex_xftp_files_count_monthly gauge\n\
|
|
\simplex_xftp_files_count_monthly " <> mstr (monthCount filesDownloadedPeriods) <> "\n\
|
|
\# filesDownloaded.monthCount\n\
|
|
\\n"
|
|
info =
|
|
"# Info\n\
|
|
\# ----\n\
|
|
\\n\
|
|
\# HELP simplex_xftp_info Server information. RTS options have to be passed via " <> rtsOptionsEnv <> " env var\n\
|
|
\# TYPE simplex_xftp_info gauge\n\
|
|
\simplex_xftp_info{version=\"" <> T.pack simplexMQVersion <> "\",rts_options=\"" <> rtsOptions <> "\"} 1\n\
|
|
\\n"
|
|
mstr a = a <> " " <> tsEpoch
|
|
mshow :: Show a => a -> Text
|
|
mshow = mstr . tshow
|
|
tsEpoch = tshow @Int64 $ floor @Double $ realToFrac (ts `diffUTCTime` epoch) * 1000
|
|
epoch = UTCTime systemEpochDay 0
|
|
{-# FOURMOLU_ENABLE\n#-}
|