Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
157
Issues
157
List
Board
Labels
Milestones
Merge Requests
9
Merge Requests
9
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
haskell-gargantext
Commits
46038100
Verified
Commit
46038100
authored
Oct 30, 2024
by
Przemyslaw Kaminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[worker] implement safe kill, more improvements
parent
49a90269
Pipeline
#6914
failed with stages
in 14 minutes and 47 seconds
Changes
14
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
112 additions
and
65 deletions
+112
-65
Worker.hs
bin/gargantext-cli/CLI/Worker.hs
+3
-3
cabal.project
cabal.project
+1
-1
gargantext.cabal
gargantext.cabal
+2
-0
New.hs
src/Gargantext/API/Node/Corpus/New.hs
+1
-0
Worker.hs
src/Gargantext/Core/Config/Worker.hs
+4
-4
CentralExchange.hs
src/Gargantext/Core/Notifications/CentralExchange.hs
+2
-2
Dispatcher.hs
src/Gargantext/Core/Notifications/Dispatcher.hs
+2
-2
Worker.hs
src/Gargantext/Core/Worker.hs
+76
-38
Broker.hs
src/Gargantext/Core/Worker/Broker.hs
+3
-3
Env.hs
src/Gargantext/Core/Worker/Env.hs
+1
-1
Jobs.hs
src/Gargantext/Core/Worker/Jobs.hs
+7
-7
Mail.hs
src/Gargantext/Database/Action/Mail.hs
+5
-1
Error.hs
src/Gargantext/Database/Query/Table/Node/Error.hs
+2
-2
Logging.hs
src/Gargantext/System/Logging.hs
+3
-1
No files found.
bin/gargantext-cli/CLI/Worker.hs
View file @
46038100
...
...
@@ -21,7 +21,7 @@ import Data.Text qualified as T
import
Gargantext.Core.Config
(
hasConfig
,
gc_worker
)
import
Gargantext.Core.Config.Types
(
SettingsFile
(
..
))
import
Gargantext.Core.Config.Worker
(
WorkerDefinition
(
..
),
WorkerSettings
(
..
),
findDefinitionByName
)
import
Gargantext.Core.Worker
(
withPGMQWorker
,
withPGMQWorkerSingle
,
initWorkerState
)
import
Gargantext.Core.Worker
(
withPGMQWorker
CtrlC
,
withPGMQWorkerSingleCtrlC
,
initWorkerState
)
import
Gargantext.Core.Worker.Env
(
withWorkerEnv
)
import
Gargantext.Core.Worker.Jobs
(
sendJob
)
import
Gargantext.Core.Worker.Jobs.Types
(
Job
(
Ping
))
...
...
@@ -59,10 +59,10 @@ workerCLI (CLIW_run (WorkerArgs { .. })) = do
putText
$
"Worker settings: "
<>
show
ws
___
if
worker_run_single
then
withPGMQWorkerSingle
env
wd
$
\
a
_state
->
do
withPGMQWorkerSingle
CtrlC
env
wd
$
\
a
_state
->
do
wait
a
else
withPGMQWorker
env
wd
$
\
a
_state
->
do
withPGMQWorker
CtrlC
env
wd
$
\
a
_state
->
do
_
<-
runReaderT
(
sendJob
Ping
)
env
wait
a
workerCLI
(
CLIW_stats
(
WorkerStatsArgs
{
..
}))
=
do
...
...
cabal.project
View file @
46038100
...
...
@@ -110,7 +110,7 @@ source-repository-package
source
-
repository
-
package
type
:
git
location
:
https
://
gitlab
.
iscpif
.
fr
/
gargantext
/
crawlers
/
openalex
.
git
tag
:
4
eec15855207dc74afc75b94c3764eede4de7b55
tag
:
8249
a40ff1ba885af45d3958f113af5b8a64c4ac
source
-
repository
-
package
type
:
git
...
...
gargantext.cabal
View file @
46038100
...
...
@@ -617,6 +617,8 @@ library
, tuple ^>= 0.3.0.2
, unordered-containers ^>= 0.2.16.0
, unicode-collation >= 0.1.3.5
-- needed for Worker / System.Posix.Signals
, unix >= 2.7.3 && < 2.9
, uri-encode ^>= 1.5.0.7
, utf8-string ^>= 1.0.2
, uuid ^>= 1.3.15
...
...
src/Gargantext/API/Node/Corpus/New.hs
View file @
46038100
...
...
@@ -207,6 +207,7 @@ addToCorpusWithQuery user cid (WithQuery { _wq_query = q
$
(
logLocM
)
DEBUG
$
"[addToCorpusWithQuery] corpus id "
<>
show
corpusId
_
<-
commitCorpus
cid
user
$
(
logLocM
)
DEBUG
$
"[addToCorpusWithQuery] corpus comitted"
-- printDebug "sending email" ("xxxxxxxxxxxxxxxxxxxxx" :: Text)
sendMail
user
...
...
src/Gargantext/Core/Config/Worker.hs
View file @
46038100
...
...
@@ -24,7 +24,7 @@ broker-agnostic.
module
Gargantext.Core.Config.Worker
where
import
Async.Worker.Broker.Types
qualified
as
B
roker
import
Async.Worker.Broker.Types
qualified
as
B
import
Database.PGMQ.Types
qualified
as
PGMQ
import
Database.PostgreSQL.Simple
qualified
as
PGS
import
Gargantext.Core.Config.Types
(
unTOMLConnectInfo
,
TOMLConnectInfo
(
..
))
...
...
@@ -64,19 +64,19 @@ instance ToTable WorkerSettings where
data
WorkerDefinition
=
WorkerDefinition
{
_wdName
::
!
WorkerName
,
_wdQueue
::
!
B
roker
.
Queue
,
_wdQueue
::
!
B
.
Queue
}
deriving
(
Show
,
Eq
)
instance
FromValue
WorkerDefinition
where
fromValue
=
parseTableFromValue
$
do
_wdName
<-
reqKey
"name"
queue
<-
reqKey
"queue"
return
$
WorkerDefinition
{
_wdQueue
=
B
roker
.
Queue
queue
,
..
}
return
$
WorkerDefinition
{
_wdQueue
=
B
.
Queue
queue
,
..
}
instance
ToValue
WorkerDefinition
where
toValue
=
defaultTableToValue
instance
ToTable
WorkerDefinition
where
toTable
(
WorkerDefinition
{
..
})
=
table
[
"name"
.=
_wdName
,
"queue"
.=
B
roker
.
_Queue
_wdQueue
]
,
"queue"
.=
B
.
_Queue
_wdQueue
]
findDefinitionByName
::
WorkerSettings
->
WorkerName
->
Maybe
WorkerDefinition
findDefinitionByName
(
WorkerSettings
{
_wsDefinitions
})
workerName
=
...
...
src/Gargantext/Core/Notifications/CentralExchange.hs
View file @
46038100
...
...
@@ -63,7 +63,7 @@ gServer (NotificationsConfig { .. }) = do
forever
$
do
-- putText "[central_exchange] receiving"
r
<-
recv
s
logMsg
ioLogger
DEBUG
$
"[central_exchange] received: "
<>
show
r
logMsg
ioLogger
D
D
EBUG
$
"[central_exchange] received: "
<>
show
r
-- C.putStrLn $ "[central_exchange] " <> r
atomically
$
TChan
.
writeTChan
tChan
r
where
...
...
@@ -110,7 +110,7 @@ notify (NotificationsConfig { _nc_central_exchange_connect }) ceMessage = do
_
<-
connect
s
$
T
.
unpack
_nc_central_exchange_connect
let
str
=
Aeson
.
encode
ceMessage
withLogger
()
$
\
ioLogger
->
logMsg
ioLogger
DEBUG
$
"[central_exchange] sending: "
<>
(
T
.
unpack
$
TE
.
decodeUtf8
$
BSL
.
toStrict
str
)
logMsg
ioLogger
D
D
EBUG
$
"[central_exchange] sending: "
<>
(
T
.
unpack
$
TE
.
decodeUtf8
$
BSL
.
toStrict
str
)
-- err <- sendNonblocking s $ BSL.toStrict str
-- putText $ "[notify] err: " <> show err
void
$
timeout
100
_000
$
send
s
$
BSL
.
toStrict
str
src/Gargantext/Core/Notifications/Dispatcher.hs
View file @
46038100
...
...
@@ -36,7 +36,7 @@ import Gargantext.Core.Notifications.CentralExchange.Types qualified as CETypes
import
Gargantext.Core.Notifications.Dispatcher.Types
import
Gargantext.Core.Worker.Types
(
JobInfo
(
..
))
import
Gargantext.Prelude
import
Gargantext.System.Logging
(
LogLevel
(
DEBUG
),
withLogger
,
logMsg
)
import
Gargantext.System.Logging
(
LogLevel
(
..
),
withLogger
,
logMsg
)
import
Nanomsg
(
Pull
(
..
),
bind
,
recv
,
withSocket
)
import
Network.WebSockets
qualified
as
WS
import
Servant.Job.Types
(
job_id
)
...
...
@@ -182,7 +182,7 @@ sendNotification throttleTChan ceMessage sub = do
sendDataMessageThrottled
::
(
WS
.
Connection
,
WS
.
DataMessage
)
->
IO
()
sendDataMessageThrottled
(
conn
,
msg
)
=
do
withLogger
()
$
\
ioL
->
logMsg
ioL
DEBUG
$
"[sendDataMessageThrottled] dispatching notification: "
<>
show
msg
logMsg
ioL
D
D
EBUG
$
"[sendDataMessageThrottled] dispatching notification: "
<>
show
msg
WS
.
sendDataMessage
conn
msg
...
...
src/Gargantext/Core/Worker.hs
View file @
46038100
...
...
@@ -19,8 +19,8 @@ module Gargantext.Core.Worker where
import
Async.Worker.Broker.PGMQ
(
PGMQBroker
)
import
Async.Worker.Broker.Types
(
BrokerMessage
,
toA
,
getMessage
,
messageId
)
import
Async.Worker
qualified
as
W
orker
import
Async.Worker.Types
qualified
as
W
orker
import
Async.Worker
qualified
as
W
import
Async.Worker.Types
qualified
as
W
import
Async.Worker.Types
(
HasWorkerBroker
)
import
Data.Text
qualified
as
T
import
Gargantext.API.Admin.Auth
(
forgotUserPassword
)
...
...
@@ -39,36 +39,35 @@ import Gargantext.Prelude
import
Gargantext.System.Logging
(
logLocM
,
LogLevel
(
..
),
logMsg
,
withLogger
)
import
Gargantext.Utils.Jobs.Error
(
HumanFriendlyErrorText
(
..
))
import
Gargantext.Utils.Jobs.Monad
(
MonadJobStatus
(
markStarted
,
markComplete
,
markFailed
))
import
System.Posix.Signals
(
Handler
(
Catch
),
installHandler
,
keyboardSignal
)
initWorkerState
::
(
HasWorkerBroker
PGMQBroker
Job
)
=>
WorkerEnv
->
WorkerDefinition
->
IO
(
W
orker
.
State
PGMQBroker
Job
)
->
IO
(
W
.
State
PGMQBroker
Job
)
initWorkerState
env
(
WorkerDefinition
{
..
})
=
do
let
gargConfig
=
env
^.
hasConfig
broker
<-
initBrokerWithDBCreate
gargConfig
pure
$
Worker
.
State
{
broker
,
queueName
=
_wdQueue
,
name
=
T
.
unpack
_wdName
,
performAction
=
performAction
env
,
onMessageReceived
=
Just
$
notifyJobStarted
env
,
onJobFinish
=
Just
$
notifyJobFinished
env
,
onJobTimeout
=
Just
$
notifyJobTimeout
env
,
onJobError
=
Just
$
notifyJobFailed
env
-- TODO Implement Ctrl-C, notify job killed
,
onWorkerKilledSafely
=
Nothing
}
pure
$
W
.
State
{
broker
,
queueName
=
_wdQueue
,
name
=
T
.
unpack
_wdName
,
performAction
=
performAction
env
,
onMessageReceived
=
Just
$
notifyJobStarted
env
,
onJobFinish
=
Just
$
notifyJobFinished
env
,
onJobTimeout
=
Just
$
notifyJobTimeout
env
,
onJobError
=
Just
$
notifyJobFailed
env
,
onWorkerKilledSafely
=
Just
$
notifyJobKilled
env
}
notifyJobStarted
::
(
HasWorkerBroker
PGMQBroker
Job
)
=>
WorkerEnv
->
W
orker
.
State
PGMQBroker
Job
->
BrokerMessage
PGMQBroker
(
W
orker
.
Job
Job
)
->
W
.
State
PGMQBroker
Job
->
BrokerMessage
PGMQBroker
(
W
.
Job
Job
)
->
IO
()
notifyJobStarted
env
(
W
orker
.
State
{
name
})
bm
=
do
notifyJobStarted
env
(
W
.
State
{
name
})
bm
=
do
let
j
=
toA
$
getMessage
bm
let
job
=
W
orker
.
job
j
let
job
=
W
.
job
j
withLogger
()
$
\
ioL
->
logMsg
ioL
DEBUG
$
"[notifyJobStarted] ["
<>
name
<>
"] starting job: "
<>
show
j
let
ji
=
JobInfo
{
_ji_message_id
=
messageId
bm
...
...
@@ -78,12 +77,12 @@ notifyJobStarted env (Worker.State { name }) bm = do
notifyJobFinished
::
(
HasWorkerBroker
PGMQBroker
Job
)
=>
WorkerEnv
->
W
orker
.
State
PGMQBroker
Job
->
BrokerMessage
PGMQBroker
(
W
orker
.
Job
Job
)
->
W
.
State
PGMQBroker
Job
->
BrokerMessage
PGMQBroker
(
W
.
Job
Job
)
->
IO
()
notifyJobFinished
env
(
W
orker
.
State
{
name
})
bm
=
do
notifyJobFinished
env
(
W
.
State
{
name
})
bm
=
do
let
j
=
toA
$
getMessage
bm
let
job
=
W
orker
.
job
j
let
job
=
W
.
job
j
withLogger
()
$
\
ioL
->
logMsg
ioL
DEBUG
$
"[notifyJobFinished] ["
<>
name
<>
"] finished job: "
<>
show
j
let
ji
=
JobInfo
{
_ji_message_id
=
messageId
bm
...
...
@@ -93,12 +92,12 @@ notifyJobFinished env (Worker.State { name }) bm = do
notifyJobTimeout
::
(
HasWorkerBroker
PGMQBroker
Job
)
=>
WorkerEnv
->
W
orker
.
State
PGMQBroker
Job
->
BrokerMessage
PGMQBroker
(
W
orker
.
Job
Job
)
->
W
.
State
PGMQBroker
Job
->
BrokerMessage
PGMQBroker
(
W
.
Job
Job
)
->
IO
()
notifyJobTimeout
env
(
W
orker
.
State
{
name
})
bm
=
do
notifyJobTimeout
env
(
W
.
State
{
name
})
bm
=
do
let
j
=
toA
$
getMessage
bm
let
job
=
W
orker
.
job
j
let
job
=
W
.
job
j
withLogger
()
$
\
ioL
->
logMsg
ioL
ERROR
$
"[notifyJobTimeout] ["
<>
name
<>
"] job timed out: "
<>
show
j
let
ji
=
JobInfo
{
_ji_message_id
=
messageId
bm
...
...
@@ -106,15 +105,15 @@ notifyJobTimeout env (Worker.State { name }) bm = do
let
jh
=
WorkerJobHandle
{
_w_job_info
=
ji
}
runWorkerMonad
env
$
markFailed
(
Just
$
UnsafeMkHumanFriendlyErrorText
"Worker job timed out!"
)
jh
notifyJobFailed
::
(
HasWorkerBroker
PGMQBroker
Job
)
notifyJobFailed
::
(
HasWorkerBroker
PGMQBroker
Job
,
HasCallStack
)
=>
WorkerEnv
->
W
orker
.
State
PGMQBroker
Job
->
BrokerMessage
PGMQBroker
(
W
orker
.
Job
Job
)
->
W
.
State
PGMQBroker
Job
->
BrokerMessage
PGMQBroker
(
W
.
Job
Job
)
->
SomeException
->
IO
()
notifyJobFailed
env
(
W
orker
.
State
{
name
})
bm
exc
=
do
notifyJobFailed
env
(
W
.
State
{
name
})
bm
exc
=
do
let
j
=
toA
$
getMessage
bm
let
job
=
W
orker
.
job
j
let
job
=
W
.
job
j
withLogger
()
$
\
ioL
->
logMsg
ioL
ERROR
$
"[notifyJobFailed] ["
<>
name
<>
"] failed job: "
<>
show
j
<>
" --- ERROR: "
<>
show
exc
let
ji
=
JobInfo
{
_ji_message_id
=
messageId
bm
...
...
@@ -122,6 +121,22 @@ notifyJobFailed env (Worker.State { name }) bm exc = do
let
jh
=
WorkerJobHandle
{
_w_job_info
=
ji
}
runWorkerMonad
env
$
markFailed
(
Just
$
UnsafeMkHumanFriendlyErrorText
"Worker job failed"
)
jh
notifyJobKilled
::
(
HasWorkerBroker
PGMQBroker
Job
,
HasCallStack
)
=>
WorkerEnv
->
W
.
State
PGMQBroker
Job
->
Maybe
(
BrokerMessage
PGMQBroker
(
W
.
Job
Job
))
->
IO
()
notifyJobKilled
_
_
Nothing
=
pure
()
notifyJobKilled
env
(
W
.
State
{
name
})
(
Just
bm
)
=
do
let
j
=
toA
$
getMessage
bm
let
job
=
W
.
job
j
withLogger
()
$
\
ioL
->
logMsg
ioL
ERROR
$
"[notifyJobKilled] ["
<>
name
<>
"] failed job: "
<>
show
j
let
ji
=
JobInfo
{
_ji_message_id
=
messageId
bm
,
_ji_mNode_id
=
getWorkerMNodeId
job
}
let
jh
=
WorkerJobHandle
{
_w_job_info
=
ji
}
runWorkerMonad
env
$
markFailed
(
Just
$
UnsafeMkHumanFriendlyErrorText
$
"Worker '"
<>
T
.
pack
name
<>
"' was killed"
)
jh
-- | Spawn a worker with PGMQ broker
-- TODO:
...
...
@@ -132,33 +147,56 @@ notifyJobFailed env (Worker.State { name }) bm exc = do
withPGMQWorker
::
(
HasWorkerBroker
PGMQBroker
Job
)
=>
WorkerEnv
->
WorkerDefinition
->
(
Async
()
->
W
orker
.
State
PGMQBroker
Job
->
IO
()
)
->
(
Async
()
->
W
.
State
PGMQBroker
Job
->
IO
()
)
->
IO
()
withPGMQWorker
env
wd
cb
=
do
state'
<-
initWorkerState
env
wd
withAsync
(
W
orker
.
run
state'
)
(
\
a
->
cb
a
state'
)
withAsync
(
W
.
run
state'
)
(
\
a
->
cb
a
state'
)
withPGMQWorkerSingle
::
(
HasWorkerBroker
PGMQBroker
Job
)
=>
WorkerEnv
->
WorkerDefinition
->
(
Async
()
->
W
orker
.
State
PGMQBroker
Job
->
IO
()
)
->
(
Async
()
->
W
.
State
PGMQBroker
Job
->
IO
()
)
->
IO
()
withPGMQWorkerSingle
env
wd
cb
=
do
state'
<-
initWorkerState
env
wd
withAsync
(
Worker
.
runSingle
state'
)
(
\
a
->
cb
a
state'
)
withAsync
(
W
.
runSingle
state'
)
(
\
a
->
cb
a
state'
)
withPGMQWorkerCtrlC
::
(
HasWorkerBroker
PGMQBroker
Job
)
=>
WorkerEnv
->
WorkerDefinition
->
(
Async
()
->
W
.
State
PGMQBroker
Job
->
IO
()
)
->
IO
()
withPGMQWorkerCtrlC
env
wd
cb
=
do
withPGMQWorker
env
wd
$
\
a
state'
->
do
let
tid
=
asyncThreadId
a
_
<-
installHandler
keyboardSignal
(
Catch
(
throwTo
tid
W
.
KillWorkerSafely
))
Nothing
cb
a
state'
withPGMQWorkerSingleCtrlC
::
(
HasWorkerBroker
PGMQBroker
Job
)
=>
WorkerEnv
->
WorkerDefinition
->
(
Async
()
->
W
.
State
PGMQBroker
Job
->
IO
()
)
->
IO
()
withPGMQWorkerSingleCtrlC
env
wd
cb
=
do
withPGMQWorkerSingle
env
wd
$
\
a
state'
->
do
let
tid
=
asyncThreadId
a
_
<-
installHandler
keyboardSignal
(
Catch
(
throwTo
tid
W
.
KillWorkerSafely
))
Nothing
cb
a
state'
-- | How the worker should process jobs
performAction
::
(
HasWorkerBroker
PGMQBroker
Job
)
=>
WorkerEnv
->
W
orker
.
State
PGMQBroker
Job
->
BrokerMessage
PGMQBroker
(
W
orker
.
Job
Job
)
->
W
.
State
PGMQBroker
Job
->
BrokerMessage
PGMQBroker
(
W
.
Job
Job
)
->
IO
()
performAction
env
_state
bm
=
do
let
job'
=
toA
$
getMessage
bm
let
job
=
W
orker
.
job
job'
let
job
=
W
.
job
job'
let
ji
=
JobInfo
{
_ji_message_id
=
messageId
bm
,
_ji_mNode_id
=
getWorkerMNodeId
job
}
let
jh
=
WorkerJobHandle
{
_w_job_info
=
ji
}
...
...
src/Gargantext/Core/Worker/Broker.hs
View file @
46038100
...
...
@@ -15,7 +15,7 @@ where
import
Async.Worker.Broker.PGMQ
(
PGMQBroker
,
BrokerInitParams
(
PGMQBrokerInitParams
))
import
Async.Worker.Broker.Types
(
Broker
,
initBroker
)
import
Async.Worker.Types
qualified
as
W
orkerT
import
Async.Worker.Types
qualified
as
W
import
Data.Text
qualified
as
T
import
Data.Text.Encoding
qualified
as
TE
import
Database.PostgreSQL.Simple
qualified
as
PSQL
...
...
@@ -29,9 +29,9 @@ import Gargantext.Prelude
-- | Create DB if not exists, then run 'initBroker' (which, in
-- particular, creates the pgmq extension, if needed)
initBrokerWithDBCreate
::
(
W
orkerT
.
HasWorkerBroker
PGMQBroker
Job
)
initBrokerWithDBCreate
::
(
W
.
HasWorkerBroker
PGMQBroker
Job
)
=>
GargConfig
->
IO
(
Broker
PGMQBroker
(
W
orkerT
.
Job
Job
))
->
IO
(
Broker
PGMQBroker
(
W
.
Job
Job
))
initBrokerWithDBCreate
gc
@
(
GargConfig
{
_gc_database_config
})
=
do
-- By using gargantext db credentials, we create pgmq db (if needed)
let
WorkerSettings
{
..
}
=
gc
^.
gc_worker
...
...
src/Gargantext/Core/Worker/Env.hs
View file @
46038100
...
...
@@ -138,7 +138,7 @@ instance CET.HasCentralExchangeNotification WorkerEnv where
c
<-
asks
(
view
$
to
_w_env_config
)
liftBase
$
do
withLogger
()
$
\
ioL
->
logMsg
ioL
DEBUG
$
"[ce_notify]: "
<>
show
(
_gc_notifications_config
c
)
<>
" :: "
<>
show
m
logMsg
ioL
D
D
EBUG
$
"[ce_notify]: "
<>
show
(
_gc_notifications_config
c
)
<>
" :: "
<>
show
m
CE
.
notify
(
_gc_notifications_config
c
)
m
---------
...
...
src/Gargantext/Core/Worker/Jobs.hs
View file @
46038100
...
...
@@ -15,7 +15,7 @@ module Gargantext.Core.Worker.Jobs where
import
Async.Worker.Broker.Types
(
MessageId
)
import
Async.Worker.Broker.PGMQ
(
PGMQBroker
)
import
Async.Worker
qualified
as
W
orker
import
Async.Worker
qualified
as
W
import
Async.Worker.Types
(
HasWorkerBroker
)
import
Control.Lens
(
view
)
import
Gargantext.API.Admin.EnvTypes
qualified
as
EnvTypes
...
...
@@ -42,13 +42,13 @@ sendJob job = do
Just
wd
->
liftBase
$
do
b
<-
initBrokerWithDBCreate
gcConfig
let
queueName
=
_wdQueue
wd
W
orker
.
sendJob'
$
Worker
.
mkDefaultSendJob
b
queueName
job
(
jobTimeout
job
)
W
.
sendJob'
$
updateJobData
job
$
W
.
mkDefaultSendJob'
b
queueName
job
-- |
Some predefined job timeouts (in seconds)
jobTimeout
::
Job
->
Int
jobTimeout
(
AddCorpusFormAsync
{})
=
300
jobTimeout
(
AddCorpusWithQuery
{})
=
3000
jobTimeout
_
=
10
-- |
We want to fine-tune job metadata parameters, for each job type
updateJobData
::
Job
->
W
.
SendJob
PGMQBroker
Job
->
W
.
SendJob
PGMQBroker
Job
updateJobData
(
AddCorpusFormAsync
{})
sj
=
sj
{
W
.
timeout
=
300
}
updateJobData
(
AddCorpusWithQuery
{})
sj
=
sj
{
W
.
timeout
=
3000
}
updateJobData
_
sj
=
sj
-- | This is just a list of what's implemented and what not.
...
...
src/Gargantext/Database/Action/Mail.hs
View file @
46038100
...
...
@@ -10,6 +10,8 @@ Portability : POSIX
-}
{-# LANGUAGE TemplateHaskell #-}
module
Gargantext.Database.Action.Mail
where
...
...
@@ -22,13 +24,15 @@ import Gargantext.Database.Prelude (CmdM)
import
Gargantext.Database.Query.Table.Node.Error
(
HasNodeError
(
..
))
import
Gargantext.Database.Schema.User
import
Gargantext.Prelude
import
Gargantext.System.Logging
(
MonadLogger
,
LogLevel
(
..
),
logLocM
)
------------------------------------------------------------------------
sendMail
::
(
HasNodeError
err
,
CmdM
env
err
m
)
=>
User
->
m
()
sendMail
::
(
HasNodeError
err
,
CmdM
env
err
m
,
MonadLogger
m
)
=>
User
->
m
()
sendMail
u
=
do
cfg
<-
view
$
mailSettings
userLight
<-
getUserLightDB
u
$
(
logLocM
)
DEBUG
$
"[sendMail] sending mail to user "
<>
show
userLight
mail
cfg
(
MailInfo
{
mailInfo_username
=
userLight_username
userLight
,
mailInfo_address
=
userLight_email
userLight
}
...
...
src/Gargantext/Database/Query/Table/Node/Error.hs
View file @
46038100
...
...
@@ -122,12 +122,12 @@ class HasNodeError e where
_NodeError
::
Prism'
e
NodeError
errorWith
::
(
MonadError
e
m
,
HasNodeError
e
)
,
HasNodeError
e
)
=>
Text
->
m
a
errorWith
x
=
nodeError
(
NodeError
$
toException
$
userError
$
T
.
unpack
x
)
nodeError
::
(
MonadError
e
m
,
HasNodeError
e
)
,
HasNodeError
e
)
=>
NodeError
->
m
a
nodeError
ne
=
throwError
$
_NodeError
#
ne
...
...
src/Gargantext/System/Logging.hs
View file @
46038100
...
...
@@ -26,8 +26,10 @@ import Text.Read (readMaybe)
data
LogLevel
=
-- | Detailed debug messages
DDEBUG
-- | Debug messages
DEBUG
|
DEBUG
-- | Information
|
INFO
-- | Normal runtime conditions
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment