1 /*
2  *  Make.org Core API
3  *  Copyright (C) 2018 Make.org
4  *
5  * This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU Affero General Public License as
7  *  published by the Free Software Foundation, either version 3 of the
8  *  License, or (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU Affero General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Affero General Public License
16  *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  *
18  */
19 
20 package org.make.api.sessionhistory
21 
22 import akka.actor.typed.receptionist.ServiceKey
23 import akka.actor.typed.{ActorRef, ActorSystem}
24 import akka.cluster.sharding.typed.scaladsl.{ClusterSharding, Entity, EntityTypeKey}
25 import org.make.api.extensions.MakeSettings
26 import org.make.api.technical.ShardingNoEnvelopeMessageExtractor
27 import org.make.api.userhistory.UserHistoryCommand
28 import org.make.core.technical.IdGenerator
29 
30 import scala.concurrent.duration.{DurationInt, FiniteDuration}
31 
32 object SessionHistoryCoordinator {
33 
34   val name: String = "session-history-coordinator"
35 
36   val TypeKey: EntityTypeKey[SessionHistoryCommand] =
37     EntityTypeKey[SessionHistoryCommand]("session-history")
38 
39   val Key: ServiceKey[SessionHistoryCommand] = ServiceKey(name)
40 
41   def apply(
42     system: ActorSystem[_],
43     userHistoryCoordinator: ActorRef[UserHistoryCommand],
44     idGenerator: IdGenerator,
45     settings: MakeSettings,
46     lockDuration: FiniteDuration = 7.seconds
47   ): ActorRef[SessionHistoryCommand] = {
48     ClusterSharding(system).init(
49       Entity(TypeKey)(_ => SessionHistoryActor(userHistoryCoordinator, lockDuration, idGenerator, settings))
50         .withMessageExtractor(ShardingNoEnvelopeMessageExtractor[SessionHistoryCommand](numberOfShards = 128))
51     )
52   }
53 }
Line Stmt Id Pos Tree Symbol Tests Code
34 11612 1288 - 1317 Literal <nosymbol> org.make.api.sessionhistory.sessionhistorycoordinatortest "session-history-coordinator"
37 17339 1414 - 1431 Literal <nosymbol> org.make.api.sessionhistory.sessionhistorycoordinatortest "session-history"
37 13761 1377 - 1432 ApplyToImplicitArgs akka.cluster.sharding.typed.scaladsl.EntityTypeKey.apply org.make.api.sessionhistory.sessionhistorycoordinatortest akka.cluster.sharding.typed.scaladsl.EntityTypeKey.apply[org.make.api.sessionhistory.SessionHistoryCommand]("session-history")((ClassTag.apply[org.make.api.sessionhistory.SessionHistoryCommand](classOf[org.make.api.sessionhistory.SessionHistoryCommand]): scala.reflect.ClassTag[org.make.api.sessionhistory.SessionHistoryCommand]))
39 18299 1481 - 1497 ApplyToImplicitArgs akka.actor.typed.receptionist.ServiceKey.apply org.make.api.sessionhistory.sessionhistorycoordinatortest akka.actor.typed.receptionist.ServiceKey.apply[org.make.api.sessionhistory.SessionHistoryCommand](SessionHistoryCoordinator.this.name)((ClassTag.apply[org.make.api.sessionhistory.SessionHistoryCommand](classOf[org.make.api.sessionhistory.SessionHistoryCommand]): scala.reflect.ClassTag[org.make.api.sessionhistory.SessionHistoryCommand]))
39 12371 1492 - 1496 Select org.make.api.sessionhistory.SessionHistoryCoordinator.name org.make.api.sessionhistory.sessionhistorycoordinatortest SessionHistoryCoordinator.this.name
48 11517 1746 - 2001 Apply akka.cluster.sharding.typed.scaladsl.ClusterSharding.init org.make.api.sessionhistory.sessionhistorycoordinatortest akka.cluster.sharding.typed.scaladsl.ClusterSharding.apply(system).init[org.make.api.sessionhistory.SessionHistoryCommand, org.make.api.sessionhistory.SessionHistoryCommand](akka.cluster.sharding.typed.scaladsl.Entity.apply[org.make.api.sessionhistory.SessionHistoryCommand](SessionHistoryCoordinator.this.TypeKey)(((x$1: akka.cluster.sharding.typed.scaladsl.EntityContext[org.make.api.sessionhistory.SessionHistoryCommand]) => SessionHistoryActor.apply(userHistoryCoordinator, lockDuration, idGenerator, settings))).withMessageExtractor[org.make.api.sessionhistory.SessionHistoryCommand](org.make.api.technical.ShardingNoEnvelopeMessageExtractor.apply[org.make.api.sessionhistory.SessionHistoryCommand](128)))
49 14584 1789 - 1796 Select org.make.api.sessionhistory.SessionHistoryCoordinator.TypeKey org.make.api.sessionhistory.sessionhistorycoordinatortest SessionHistoryCoordinator.this.TypeKey
49 10774 1803 - 1883 Apply org.make.api.sessionhistory.SessionHistoryActor.apply SessionHistoryActor.apply(userHistoryCoordinator, lockDuration, idGenerator, settings)
50 9243 1915 - 1994 Apply org.make.api.technical.ShardingNoEnvelopeMessageExtractor.apply org.make.api.sessionhistory.sessionhistorycoordinatortest org.make.api.technical.ShardingNoEnvelopeMessageExtractor.apply[org.make.api.sessionhistory.SessionHistoryCommand](128)
50 15355 1782 - 1995 Apply akka.cluster.sharding.typed.scaladsl.Entity.withMessageExtractor org.make.api.sessionhistory.sessionhistorycoordinatortest akka.cluster.sharding.typed.scaladsl.Entity.apply[org.make.api.sessionhistory.SessionHistoryCommand](SessionHistoryCoordinator.this.TypeKey)(((x$1: akka.cluster.sharding.typed.scaladsl.EntityContext[org.make.api.sessionhistory.SessionHistoryCommand]) => SessionHistoryActor.apply(userHistoryCoordinator, lockDuration, idGenerator, settings))).withMessageExtractor[org.make.api.sessionhistory.SessionHistoryCommand](org.make.api.technical.ShardingNoEnvelopeMessageExtractor.apply[org.make.api.sessionhistory.SessionHistoryCommand](128))