Пример #1
0
 public FormMain(IClientMainService service, IClientService cService, IProductService pService, IReportService rService, IBackUpService backUpService)
 {
     InitializeComponent();
     this.service       = service;
     this.cService      = cService;
     this.pService      = pService;
     this.rService      = rService;
     this.backUpService = backUpService;
     order = new OrderBindingModel();
     order.OrderProducts = new List <OrderProductBindingModel>();
 }
Пример #2
0
 public InventoryActor(IInventoryStorage inventoryStorage, IPerformanceService performanceService, IBackUpService backUpService, bool withCache = true)
 {
     if (backUpService == null)
     {
         throw new ArgumentNullException(nameof(backUpService));
     }
     BackUpService      = backUpService;
     PerformanceService = performanceService;
     PerformanceService.Init();
     Logger.Debug("Starting Inventory Actor ....");
     InventoryStorage = inventoryStorage;
     _withCache       = withCache;
     Become(Initializing);
 }
        public void StartServer(IPerformanceService performanceService, IBackUpService backUpService, Action <IActorRef, ActorSystem> onReady = null, Type storageType = null, string serverActorSystemName = null,
                                ActorSystem serverActorSystem = null, string serverActorSystemConfig = null)
        {
            Log.Debug("Initializing ...");
            IActorRef inventoryActor = null;

            if (storageType == null)
            {
                // var message = "Unable to initialize storage. No storage specified" ;
                // Log.Debug(message);
                var storageSettings = ConfigurationManager.AppSettings["Storage"];
                if (string.IsNullOrEmpty(storageSettings))
                {
                    const string message = "Could not find Storage setup in config";
                    Log.Debug(message);
                    throw new Exception(message);
                }
                else
                {
                    storageType = Type.GetType(storageSettings);
                }
            }
            if (storageType == null)
            {
                const string message = "Could not create storage type";
                Log.Debug(message);
                throw new Exception(message);
            }
            var inventoryStorage = (IInventoryStorage)Activator.CreateInstance(storageType);

            Log.Debug("Starting Server");

            ActorSystemFactory.CreateOrSetUpActorSystem(serverActorSystemName: serverActorSystemName,
                                                        actorSystem: serverActorSystem, actorSystemConfig: serverActorSystemConfig);

            inventoryActor =
                ActorSystemFactory.InventoryServiceActorSystem.ActorOf(
                    Props.Create(() => new InventoryActor(inventoryStorage, performanceService, backUpService, true)),
                    typeof(InventoryActor).Name);

            if (inventoryActor == null || inventoryActor.IsNobody())
            {
                const string message = "Unable to create actor";
                Log.Debug(message);
                throw new Exception(message);
            }
            ActorSystem = ActorSystemFactory.InventoryServiceActorSystem;

            onReady?.Invoke(inventoryActor, ActorSystem);
        }
Пример #4
0
        public InventoryServiceServer(IPerformanceService performanceService, IBackUpService backUpService, InventoryServerOptions options = null)
        {
            Options = options ?? new InventoryServerOptions();
            if (Options.DontUseActorSystem)
            {
                DontUseActorSystem   = Options.DontUseActorSystem;
                TestInventoryStorage = Options.StorageType != null
                    ? (IInventoryStorage)Activator.CreateInstance(Options.StorageType)
                    : new Storage.InMemoryLib.InMemory();
                if (Options.InitialInventory != null)
                {
                    TestInventoryStorage.WriteInventoryAsync(Options.InitialInventory);
                }
            }
            else
            {
                Sys = Options.ClientActorSystem;
                InventoryServiceApplication = new InventoryServiceApplication();

                if (string.IsNullOrEmpty(Options.InventoryActorAddress))
                {
                    Options.InventoryActorAddress = ConfigurationManager.AppSettings["RemoteInventoryActorAddress"];
                }

                InventoryServiceApplication.Start(performanceService, backUpService, Options.OnInventoryActorSystemReady, Options.StorageType,
                                                  serverEndPoint: Options.ServerEndPoint, serverActorSystemName: Options.ServerActorSystemName,
                                                  serverActorSystem: Options.ServerActorSystem,
                                                  serverActorSystemConfig: Options.ServerActorSystemConfig);

                Sys = Sys ?? InventoryServiceApplication.InventoryServiceServerApp.ActorSystem;
                var selection = Sys.ActorSelection(Options.InventoryActorAddress);

                inventoryActor = TryResolveActorSelection(selection);

                var serverEndPoint = Options.ServerEndPoint;//ConfigurationManager.AppSettings["ServerEndPoint"];
                if (!string.IsNullOrEmpty(serverEndPoint))
                {
                    OwinRef = WebApp.Start <Startup>(url: serverEndPoint);
                }

                if (Options.InitialInventory != null)
                {
                    InitializeWithInventorydata(Options);
                }
            }
        }
Пример #5
0
 public void Start(IPerformanceService performanceService, IBackUpService backUpService, Action <IActorRef, ActorSystem> onReady = null,
                   Type storageType                 = null
                   , string serverEndPoint          = null
                   , string serverActorSystemName   = null
                   , ActorSystem serverActorSystem  = null
                   , string serverActorSystemConfig = null
                   )
 {
     try
     {
         InventoryServiceServerApp = new InventoryServiceServerApp();
         InventoryServiceServerApp.StartServer(performanceService, backUpService, onReady, storageType, serverActorSystemName: serverActorSystemName, serverActorSystem: serverActorSystem, serverActorSystemConfig: serverActorSystemConfig);
     }
     catch (Exception e)
     {
         Log.Error(e, "Unable to start inventory service");
         throw;
     }
     //
 }
Пример #6
0
 public BackupController(IBackUpService context, IToolTypeService contextToolTypes, IToolTypeSearchService contextToolTypesSearch)
 {
     _context                = context;
     _contextToolTypes       = contextToolTypes;
     _contextToolTypesSearch = contextToolTypesSearch;
 }
        public InventoryQueryActor(IBackUpService backUpService)
        {
            if (backUpService == null)
            {
                throw new ArgumentNullException(nameof(backUpService));
            }
            BackUpService = backUpService;
            var lastUpadteTime = DateTime.UtcNow;

            Subscribers = new List <Tuple <string, IActorRef> >();
            LastReceivedServerMessage = "System started at " + DateTime.UtcNow;
            RealTimeInventories       = new Dictionary <string, IRealTimeInventory>();
            Logger.Debug(LastReceivedServerMessage);
            Receive <string>(message =>
            {
                LastReceivedServerMessage = string.IsNullOrEmpty(message) ? LastReceivedServerMessage : message;
                Logger.Debug(LastReceivedServerMessage);
            });
            Receive <BackUpAllInventoryMessage>(message =>
            {
                try
                {
                    var inventories = RealTimeInventories.Select(x => x.Value as RealTimeInventory).ToList();
                    var csv         = inventories.ToDelimitedText(",", true);
                    backUpService.BackUp(("inventory-service-backup-" + $"{DateTime.UtcNow:dddd MMMM d yyyy HH-mm-ss}" + ".csv").ToLower(), csv);
                    Sender.Tell(new BackUpAllInventoryCompletedMessage());
                }
                catch (Exception e)
                {
                    Sender.Tell(new BackUpAllInventoryFailedMessage(e.Message + " : " + e.InnerException?.Message));
                }
            });
            Receive <ExportAllInventoryMessage>(message =>
            {
                try
                {
                    var inventories = RealTimeInventories.Select(x => x.Value as RealTimeInventory).ToList();
                    var csv         = inventories.ToDelimitedText(",", true);
                    Sender.Tell(new ExportAllInventoryCompletedMessage(csv));
                }
                catch (Exception)
                {
                    Sender.Tell(new ExportAllInventoryCompletedMessage(null));
                }
            });
            Receive <QueryInventoryListMessage>(message =>
            {
                NotifySubscribersAndRemoveStaleSubscribers(RealTimeInventories);
            });
            Receive <RealTimeInventoryChangeMessage>(message =>
            {
                RealTimeInventories[message.RealTimeInventory.ProductId] = message.RealTimeInventory;

                // because delivery may be out of order . probably this line is not needed
                //LastEtag = LastEtag.IsMostRecentThan(message.RealTimeInventory.ETag) ?  LastEtag: message.RealTimeInventory.ETag;

                NotifySubscribersAndRemoveStaleSubscribers(message);
                Logger.Debug("total inventories in inventory service : " + RealTimeInventories.Count);
            });
            Receive <GetAllInventoryListMessage>(message =>
            {
                Sender.Tell(new QueryInventoryCompletedMessage(RealTimeInventories.Select(x => x.Value).ToList(), 0, 0));
            });
            Receive <IRequestMessage>(message =>
            {
                NotifySubscribersAndRemoveStaleSubscribers(message);

                Logger.Debug("received by inventory Actor - " + message.GetType().Name + " - " + message);

                MessageCount++;
                var secondsPast = (int)(DateTime.UtcNow - lastUpadteTime).TotalSeconds;

                if (secondsPast <= 1)
                {
                    return;
                }

                MessageSpeed     = MessageCount / secondsPast;
                PeakMessageSpeed = (PeakMessageSpeed > MessageSpeed) ? PeakMessageSpeed : MessageSpeed;
                lastUpadteTime   = DateTime.UtcNow;
                MessageCount     = 0;
            });
            Receive <Terminated>(t =>
            {
                Logger.Error("Removing subscriber " + t.ActorRef.Path.ToStringWithUid() + " because no ActorAliveMessage was received over time ....");
                Self.Tell(new UnSubScribeToNotificationMessage(t.ActorRef.Path.ToStringWithUid()));
            });
            Receive <SubScribeToNotificationMessage>(message =>
            {
                if (Sender.IsNobody())
                {
                    Logger.Error("No subscriber specified or subscriber is nobody");
                }
                else
                {
                    var id = Sender.Path.ToStringWithUid();
                    Subscribers.Add(new Tuple <string, IActorRef>(id, Sender));
                    ActorAliveList = ActorAliveList ?? new HashSet <string>();
                    ActorAliveList.Add(id);
                    Context.Watch(Sender);
                    Sender.Tell(new SubScribeToNotificationCompletedMessage(id));
                    Logger.Debug("Successfully subscribed . Subscription id : " + id + " and subscriber is : " + Sender.Path);
                }
            });
            Receive <UnSubScribeToNotificationMessage>(message =>
            {
                if (!Subscribers.Exists(x => x.Item1 == message.SubscriptionId))
                {
                    Logger.Error("Unable to unsubscribe : No subscriber specified or subscriber is nobody");
                    Sender.Tell(new SubScribeToNotificationFailedMessage("Subscription doesn't exists"));
                }
                else
                {
                    Logger.Debug("Unsubscribing  subscriber " + message.SubscriptionId + " .... ");
                    Subscribers.Remove(Subscribers.Find(x => x.Item1 == message.SubscriptionId));
                    Sender.Tell(new UnSubScribeToNotificationCompletedMessage());
                }
                Subscribers.Remove(Subscribers.Find(x => string.IsNullOrEmpty(x?.Item1.ToString())));
            });
            Receive <CheckIfNotificationSubscriptionExistsMessage>(message =>
            {
                var subscriptionExists = Subscribers.Exists(x => x.Item1 == message.SubscriptionId);
                Sender.Tell(new CheckIfNotificationSubscriptionExistsCompletedMessage(subscriptionExists));
            });
            Context.System.Scheduler.ScheduleTellRepeatedly(TimeSpan.Zero, TimeSpan.FromHours(1), Self, new BackUpAllInventoryMessage(), Self);
        }
Пример #8
0
 public ReportController(IReportService service, IBackUpService backUpService)
 {
     _service       = service;
     _backUpService = backUpService;
 }