@ -44,6 +44,7 @@ public final class BackgroundPoller {
}
. defaulting ( to : ( [ ] , [ ] ) )
let pollStart : TimeInterval = dependencies . dateNow . timeIntervalSince1970
Log . info ( " [BackgroundPoller] Fetching Users: 1, Groups: \( groupIds . count ) , Communities: \( servers . count ) . " )
Publishers
. MergeMany (
@ -56,7 +57,9 @@ public final class BackgroundPoller {
. collect ( )
. handleEvents (
receiveOutput : { _ in
Log . info ( " [BackgroundPoller] Finished polling. " )
let endTime : TimeInterval = dependencies . dateNow . timeIntervalSince1970
let duration : TimeUnit = . seconds ( endTime - pollStart )
Log . info ( " [BackgroundPoller] Finished polling after \( duration , unit : . s ) . " )
}
)
. sinkUntilComplete (
@ -67,7 +70,9 @@ public final class BackgroundPoller {
switch result {
case . finished : completionHandler ( . newData )
case . failure ( let error ) :
Log . error ( " [BackgroundPoller] Failed due to error: \( error ) . " )
let endTime : TimeInterval = dependencies . dateNow . timeIntervalSince1970
let duration : TimeUnit = . seconds ( endTime - pollStart )
Log . error ( " [BackgroundPoller] Failed due to error: \( error ) after \( duration , unit : . s ) . " )
completionHandler ( . failed )
}
}
@ -76,10 +81,14 @@ public final class BackgroundPoller {
private static func pollForMessages (
using dependencies : Dependencies
) -> AnyPublisher < Void , Erro r> {
) -> AnyPublisher < Void , Neve r> {
let userPublicKey : String = getUserHexEncodedPublicKey ( using : dependencies )
return CurrentUserPoller ( ) . poll (
let poller : Poller = CurrentUserPoller ( )
let pollerName : String = poller . pollerName ( for : userPublicKey )
let pollStart : TimeInterval = dependencies . dateNow . timeIntervalSince1970
return poller . poll (
namespaces : CurrentUserPoller . namespaces ,
for : userPublicKey ,
calledFromBackgroundPoller : true ,
@ -89,21 +98,37 @@ public final class BackgroundPoller {
)
. handleEvents (
receiveOutput : { _ , _ , validMessageCount , _ in
Log . info ( " [BackgroundPoller] Received \( validMessageCount ) valid message(s). " )
let endTime : TimeInterval = dependencies . dateNow . timeIntervalSince1970
let duration : TimeUnit = . seconds ( endTime - pollStart )
Log . info ( " [BackgroundPoller] \( pollerName ) received \( validMessageCount ) valid message(s) after \( duration , unit : . s ) . " )
} ,
receiveCompletion : { result in
switch result {
case . finished : break
case . failure ( let error ) :
let endTime : TimeInterval = dependencies . dateNow . timeIntervalSince1970
let duration : TimeUnit = . seconds ( endTime - pollStart )
Log . error ( " [BackgroundPoller] \( pollerName ) failed after \( duration , unit : . s ) due to error: \( error ) . " )
}
}
)
. map { _ in ( ) }
. catch { _ in Just ( ( ) ) . eraseToAnyPublisher ( ) }
. eraseToAnyPublisher ( )
}
private static func pollForClosedGroupMessages (
groupIds : Set < String > ,
using dependencies : Dependencies
) -> [ AnyPublisher < Void , Error > ] {
) -> [ AnyPublisher < Void , Neve r> ] {
// F e t c h a l l c l o s e d g r o u p s ( e x c l u d i n g a n y d o n ' t c o n t a i n t h e c u r r e n t u s e r a s a
// G r o u p M e m e b e r a s t h e u s e r i s n o l o n g e r a m e m b e r o f t h o s e )
return groupIds . map { groupPublicKey in
return ClosedGroupPoller ( )
let poller : Poller = ClosedGroupPoller ( )
let pollerName : String = poller . pollerName ( for : groupPublicKey )
let pollStart : TimeInterval = dependencies . dateNow . timeIntervalSince1970
return poller
. poll (
namespaces : ClosedGroupPoller . namespaces ,
for : groupPublicKey ,
@ -114,10 +139,22 @@ public final class BackgroundPoller {
)
. handleEvents (
receiveOutput : { _ , _ , validMessageCount , _ in
Log . info ( " [BackgroundPoller] Received \( validMessageCount ) valid message(s) for group: \( groupPublicKey ) . " )
let endTime : TimeInterval = dependencies . dateNow . timeIntervalSince1970
let duration : TimeUnit = . seconds ( endTime - pollStart )
Log . info ( " [BackgroundPoller] \( pollerName ) received \( validMessageCount ) valid message(s) after \( duration , unit : . s ) . " )
} ,
receiveCompletion : { result in
switch result {
case . finished : break
case . failure ( let error ) :
let endTime : TimeInterval = dependencies . dateNow . timeIntervalSince1970
let duration : TimeUnit = . seconds ( endTime - pollStart )
Log . error ( " [BackgroundPoller] \( pollerName ) failed after \( duration , unit : . s ) due to error: \( error ) . " )
}
}
)
. map { _ in ( ) }
. catch { _ in Just ( ( ) ) . eraseToAnyPublisher ( ) }
. eraseToAnyPublisher ( )
}
}
@ -125,9 +162,11 @@ public final class BackgroundPoller {
private static func pollForCommunityMessages (
servers : Set < String > ,
using dependencies : Dependencies
) -> [ AnyPublisher < Void , Erro r> ] {
return servers . map { server -> AnyPublisher < Void , Erro r> in
) -> [ AnyPublisher < Void , Neve r> ] {
return servers . map { server -> AnyPublisher < Void , Neve r> in
let poller : OpenGroupAPI . Poller = OpenGroupAPI . Poller ( for : server )
let pollerName : String = " Community poller for server: \( server ) "
let pollStart : TimeInterval = dependencies . dateNow . timeIntervalSince1970
poller . stop ( )
return poller . poll (
@ -136,6 +175,25 @@ public final class BackgroundPoller {
isPostCapabilitiesRetry : false ,
using : dependencies
)
. handleEvents (
receiveOutput : { _ in
let endTime : TimeInterval = dependencies . dateNow . timeIntervalSince1970
let duration : TimeUnit = . seconds ( endTime - pollStart )
Log . info ( " [BackgroundPoller] \( pollerName ) succeeded after \( duration , unit : . s ) . " )
} ,
receiveCompletion : { result in
switch result {
case . finished : break
case . failure ( let error ) :
let endTime : TimeInterval = dependencies . dateNow . timeIntervalSince1970
let duration : TimeUnit = . seconds ( endTime - pollStart )
Log . error ( " [BackgroundPoller] \( pollerName ) failed after \( duration , unit : . s ) due to error: \( error ) . " )
}
}
)
. map { _ in ( ) }
. catch { _ in Just ( ( ) ) . eraseToAnyPublisher ( ) }
. eraseToAnyPublisher ( )
}
}
}