Beispiel #1
0
            public static void SetResponseOrderingRequired(IChannelHandlerContext ctx, bool required)
            {
                DispatcherContext dispatcherContext = GetDispatcherContext(ctx);

                dispatcherContext.responseOrderingRequirementInitialized = true;
                dispatcherContext.responseOrderingRequired = required;
            }
Beispiel #2
0
        private async Task SendTApplicationExceptionAsync(
            TApplicationException x,
            IChannelHandlerContext ctx,
            ThriftMessage request,
            long responseSequenceId,
            TNiftyTransport requestTransport,
            TProtocol inProtocol,
            TProtocol outProtocol)
        {
            if (ctx.Channel.Open)
            {
                try
                {
                    TMessage message = inProtocol.ReadMessageBegin();
                    outProtocol.WriteMessageBegin(new TMessage(message.Name, TMessageType.Exception, message.SeqID));
                    x.Write(outProtocol);
                    outProtocol.WriteMessageEnd();
                    requestTransport.setTApplicationException(x);
                    outProtocol.Transport.Flush();
                    //unrelease on requestTransport dispose;

                    ThriftMessage response = request.MessageFactory.Invoke(requestTransport.OutBuffer);
                    await WriteResponseAsync(ctx, response, responseSequenceId, DispatcherContext.IsResponseOrderingRequired(ctx));
                }
                catch (TException ex)
                {
                    OnDispatchException(ctx, ex);
                }
            }
        }
 public async Task Dispatch(DispatcherContext dispatcherContext)
 {
     foreach (var writer in this._writers())
     {
         await writer.Write(dispatcherContext.Metadata, dispatcherContext.MetadataPublishContext);
     }
 }
Beispiel #4
0
        public static User CreateTestUser(Guid accountId, string password = null)
        {
            using (var dispatcherContext = DispatcherContext.Create())
            {
                var userService = dispatcherContext.UserService;
                var login       = "******" + Guid.NewGuid();
                var user        = new User()
                {
                    Login      = login,
                    LastName   = login,
                    FirstName  = login,
                    MiddleName = login,
                    Post       = "Post"
                };

                if (!string.IsNullOrEmpty(password))
                {
                    user.PasswordHash = PasswordHelper.GetPasswordHashString(password);
                }

                // должны быть уникальные, т.к. это используется юнит-тестах уведомлений на смс
                var phone = Guid.NewGuid().ToString();

                user.UserContacts.Add(new UserContact()
                {
                    Type  = UserContactType.MobilePhone,
                    Value = phone
                });

                user = userService.CreateUser(user, accountId, false);
                return(user);
            }
        }
Beispiel #5
0
 public BulbService(DispatcherContext dispatcherContext)
 {
     if (dispatcherContext == null)
     {
         throw new ArgumentNullException("dispatcherContext");
     }
     Context = dispatcherContext;
 }
Beispiel #6
0
 public LogService(DispatcherContext context)
 {
     if (context == null)
     {
         throw new ArgumentNullException("context");
     }
     Context = context;
 }
Beispiel #7
0
        public async Task Dispatch(DispatcherContext dispatcherContext)
        {
            var writers = this._dependencyResolver.ResolveAll <IFederationMetadataWriter>();

            foreach (var writer in writers)
            {
                await writer.Write(dispatcherContext.Metadata, dispatcherContext.MetadataPublishContext);
            }
        }
        public AccountController(ApplicationUserManager userManager,
            ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
        {
            var context = new DispatcherContext();
            db = context;
            idContext = context;

            UserManager = userManager;
            AccessTokenFormat = accessTokenFormat;
        }
Beispiel #9
0
        public static IMetricTypeCacheReadObject CreateTestMetricType(Guid accountId)
        {
            var name = "Counter." + Guid.NewGuid();

            using (var dispatcherContext = DispatcherContext.Create())
            {
                var service = dispatcherContext.MetricService;
                var type    = service.GetOrCreateType(accountId, name);
                return(type);
            }
        }
Beispiel #10
0
        public FlightServiceTests()
        {
            var optionsBuilder = new DbContextOptionsBuilder <DispatcherContext>();

            optionsBuilder.UseSqlServer(@"data source=.\SQLEXPRESS;initial catalog=DispatcherDB;integrated security=True;MultipleActiveResultSets=True;");

            dispatcherContext = new DispatcherContext(optionsBuilder.Options);

            _flightRepository = new Repository <Flight>(dispatcherContext);

            _flightService = new FlightService(_flightRepository);
        }
Beispiel #11
0
 public static IUnitTestTypeCacheReadObject CreateTestUnitTestType(Guid accountId)
 {
     using (var dispatcherContext = DispatcherContext.Create())
     {
         var service      = dispatcherContext.UnitTestTypeService;
         var unitTestType = service.GetOrCreateUnitTestType(accountId, new GetOrCreateUnitTestTypeRequestData()
         {
             DisplayName = "Тестовый тип проверки " + Guid.NewGuid(),
             SystemName  = "UnitTestType.Test " + Guid.NewGuid()
         });
         return(unitTestType);
     }
 }
        /// <summary>
        /// Shows the selected view.
        /// </summary>
        /// <param name="request">The request which indicates which view to show.</param>
        private void ShowView(ShowViewRequest request)
        {
            Action action = () => ShowViewInternal(request);

            if (DispatcherContext.IsSynchronized)
            {
                action();
            }
            else
            {
                DispatcherContext.Invoke(action);
            }
        }
Beispiel #13
0
        public static IMetricCacheReadObject CreateTestMetric(Guid accountId, Guid componentId)
        {
            var type = CreateTestMetricType(accountId);

            using (var dispatcherContext = DispatcherContext.Create())
            {
                var service  = dispatcherContext.MetricService;
                var metricId = service.CreateMetric(accountId, componentId, type.Id);
                return(AllCaches.Metrics.Find(new AccountCacheRequest()
                {
                    AccountId = accountId,
                    ObjectId = metricId
                }));
            }
        }
Beispiel #14
0
        public static ComponentType CreateRandomComponentType(Guid accountId)
        {
            var guid = Guid.NewGuid().ToString();

            using (var dispatcherContext = DispatcherContext.Create())
            {
                var data = new GetOrCreateComponentTypeRequestData()
                {
                    DisplayName = "display name " + guid,
                    SystemName  = "sysName " + guid
                };
                var type = dispatcherContext.ComponentTypeService.GetOrCreateComponentType(accountId, data);
                return(type);
            }
        }
Beispiel #15
0
            private static DispatcherContext GetDispatcherContext(IChannelHandlerContext ctx)
            {
                AttributeKey <DispatcherContext> key = AttributeKey <DispatcherContext> .ValueOf(DispatcherContext.AttributeKey);

                var attachment = ctx.GetAttribute(key);
                DispatcherContext dispatcherContext = attachment.Get();

                if (dispatcherContext == null)
                {
                    // No context was added yet, add one
                    dispatcherContext = new DispatcherContext();
                    attachment.Set(dispatcherContext);
                }

                return(dispatcherContext);
            }
Beispiel #16
0
        private void CheckResponseOrderingRequirements(IChannelHandlerContext ctx, ThriftMessage message)
        {
            bool messageRequiresOrderedResponses = message.IsOrderedResponsesRequired;

            if (!DispatcherContext.IsResponseOrderingRequirementInitialized(ctx))
            {
                // This is the first request. This message will decide whether all responses on the
                // channel must be strictly ordered, or whether out-of-order is allowed.
                DispatcherContext.SetResponseOrderingRequired(ctx, messageRequiresOrderedResponses);
            }
            else if (messageRequiresOrderedResponses != DispatcherContext.IsResponseOrderingRequired(ctx))
            {
                // This is not the first request. Verify that the ordering requirement on this message
                // is consistent with the requirement on the channel itself.
                throw new NiftyException("Every message on a single channel must specify the same requirement for response ordering");
            }
        }
Beispiel #17
0
        public async Task <ViewLifetimeControl> OpenAsync(ViewServiceParams parameters)
        {
            //if (ApiInformation.IsPropertyPresent("Windows.UI.ViewManagement.ApplicationView", "PersistedStateId"))
            //{
            //    try
            //    {
            //        ApplicationView.ClearPersistedState("Calls");
            //    }
            //    catch { }
            //}

            var newView    = CoreApplication.CreateNewView();
            var dispatcher = new DispatcherContext(newView.DispatcherQueue);

            var newControl = await dispatcher.DispatchAsync(async() =>
            {
                var newWindow  = Window.Current;
                var newAppView = ApplicationView.GetForCurrentView();

                newAppView.Title = parameters.Title ?? string.Empty;

                if (ApiInformation.IsPropertyPresent("Windows.UI.ViewManagement.ApplicationView", "PersistedStateId"))
                {
                    newAppView.PersistedStateId = parameters.PersistentId;
                }

                var control       = ViewLifetimeControl.GetForCurrentView();
                control.Released += (s, args) =>
                {
                    newWindow.Close();
                };

                newWindow.Content = parameters.Content(control);
                newWindow.Activate();

                var preferences        = ViewModePreferences.CreateDefault(parameters.ViewMode);
                preferences.CustomSize = new Size(parameters.Width, parameters.Height);

                await ApplicationViewSwitcher.TryShowAsViewModeAsync(newAppView.Id, parameters.ViewMode, preferences);
                //newAppView.TryResizeView(new Size(parameters.Width, parameters.Height));

                return(control);
            }).ConfigureAwait(false);

            return(newControl);
        }
Beispiel #18
0
        public async Task CreateMetadata(MetadataGenerateRequest context)
        {
            var configuration = this._contextFactory(context);

            this._logProvider.LogMessage(String.Format("Metadata create request recieved on {0} for federation party: {1}", DateTimeOffset.Now, configuration.FederationPartyId));

            var sb = new StringBuilder();

            using (var xmlWriter = XmlWriter.Create(sb))
            {
                await((IMetadataGenerator)this).CreateMetadata(configuration, xmlWriter);
            }
            var metadata = new XmlDocument();

            metadata.LoadXml(sb.ToString());
            this._logProvider.LogMessage(String.Format("SP matadata:\r\n{0}", sb.ToString()));
            var dispatcherContext = new DispatcherContext(metadata.DocumentElement, context.Target);

            await this._metadataDispatcher.Dispatch(dispatcherContext);
        }
Beispiel #19
0
        private void WriteResponseInOrder(IChannelHandlerContext ctx,
                                          ThriftMessage response,
                                          long responseSequenceId)
        {
            // Ensure responses to requests are written in the same order the requests
            // were received.
            lock (_responseMap) {
                long currentResponseId = Interlocked.Read(ref _lastResponseWrittenId) + 1;
                if (responseSequenceId != currentResponseId)
                {
                    // This response is NOT next in line of ordered responses, save it to
                    // be sent later, after responses to all earlier requests have been
                    // sent.
                    _responseMap[responseSequenceId] = response;
                }
                else
                {
                    // This response was next in line, write this response now, and see if
                    // there are others next in line that should be sent now as well.
                    do
                    {
                        ctx.Channel.WriteAndFlushAsync(response).GetAwaiter().GetResult();
                        Interlocked.Increment(ref _lastResponseWrittenId);
                        ++currentResponseId;
                        response = _responseMap.RemoveAndGet(currentResponseId);
                    } while (null != response);

                    // Now that we've written some responses, check if reads should be unblocked
                    if (DispatcherContext.IsChannelReadBlocked(ctx))
                    {
                        long lastRequestSequenceId = Interlocked.Read(ref _dispatcherSequenceId);
                        if (lastRequestSequenceId <= Interlocked.Read(ref _lastResponseWrittenId) + _queuedResponseLimit)
                        {
                            DispatcherContext.UnblockChannelReads(ctx);
                        }
                    }
                }
            }
        }
Beispiel #20
0
        private long BlockReadingForOrderReponse(IChannelHandlerContext ctx)
        {
            long requestSequenceId = Interlocked.Increment(ref _dispatcherSequenceId);

            if (DispatcherContext.IsResponseOrderingRequired(ctx))
            {
                lock (_responseMap)
                {
                    // Limit the number of pending responses (responses which finished out of order, and are
                    // waiting for previous requests to be finished so they can be written in order), by
                    // blocking further channel reads. Due to the way Netty frame decoders work, this is more
                    // of an estimate than a hard limit. Netty may continue to decode and process several
                    // more requests that were in the latest read, even while further reads on the channel
                    // have been blocked.
                    if (requestSequenceId > Interlocked.Read(ref _lastResponseWrittenId) + _queuedResponseLimit &&
                        !DispatcherContext.IsChannelReadBlocked(ctx))
                    {
                        DispatcherContext.BlockChannelReads(ctx);
                    }
                }
            }

            return(requestSequenceId);
        }
 public AccountManagementService(DispatcherContext context)
 {
     Context = context;
 }
Beispiel #22
0
        public User CreateUser(User user, Guid accountId, bool sendLetter = true)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }
            if (user.Login == null)
            {
                throw new Exception("Не заполнено поле Login");
            }

            var existingLogin = ConfigDbServicesHelper.GetLoginService().GetOneOrNull(accountId, user.Login);

            if (existingLogin != null)
            {
                throw new LoginAlreadyExistsException(user.Login);
            }

            user.SecurityStamp = Guid.NewGuid().ToString();
            user.DisplayName   = user.DisplayName ?? user.Login;

            user.UserContacts.Add(new UserContact()
            {
                Type  = UserContactType.Email,
                Value = user.Login
            });

            foreach (var role in user.Roles)
            {
                role.User = user;
                if (role.Id == Guid.Empty)
                {
                    role.Id = Guid.NewGuid();
                }
            }

            foreach (var contact in user.UserContacts)
            {
                contact.User = user;
                if (contact.Id == Guid.Empty)
                {
                    contact.Id         = Guid.NewGuid();
                    contact.CreateDate = DateTime.Now;
                }
            }

            var accountContext = Context.GetAccountDbContext(accountId);
            var userRepository = accountContext.GetUserRepository();

            userRepository.Add(user);

            ConfigDbServicesHelper.GetLoginService().Add(user.Id, accountId, user.Login);

            Context.SaveChanges();

            // По умолчанию включаем отправку новостей
            var userSettingService = accountContext.GetUserSettingService();

            userSettingService.SendMeNews(user.Id, true);
            Context.SaveChanges();

            // Для нового пользователя нужно создать подписки
            var subscriptionService = new SubscriptionService(Context);

            subscriptionService.CreateDefaultForUser(accountId, user.Id);
            Context.SaveChanges();

            if (sendLetter)
            {
                var token = StartResetPassword(user.Id, false);
                using (var dispatcherContext = DispatcherContext.Create())
                {
                    var userService = dispatcherContext.UserService;
                    userService.SendNewUserLetter(accountId, user.Id, token);
                }
            }

            return(user);
        }
Beispiel #23
0
        public async Task <ViewLifetimeControl> OpenAsync(Type page, object parameter = null, string title = null,
                                                          ViewSizePreference size     = ViewSizePreference.UseHalf, int session = 0, string id = "0")
        {
            WriteLine($"Page: {page}, Parameter: {parameter}, Title: {title}, Size: {size}");

            var currentView = ApplicationView.GetForCurrentView();

            title = title ?? currentView.Title;



            if (parameter != null && _windows.TryGetValue(parameter, out IDispatcherContext value))
            {
                var newControl = await value.DispatchAsync(async() =>
                {
                    var control    = ViewLifetimeControl.GetForCurrentView();
                    var newAppView = ApplicationView.GetForCurrentView();

                    await ApplicationViewSwitcher
                    .SwitchAsync(newAppView.Id, currentView.Id, ApplicationViewSwitchingOptions.Default);

                    return(control);
                }).ConfigureAwait(false);

                return(newControl);
            }
            else
            {
                var newView    = CoreApplication.CreateNewView();
                var dispatcher = new DispatcherContext(newView.Dispatcher);

                if (parameter != null)
                {
                    _windows[parameter] = dispatcher;
                }

                var bounds = Window.Current.Bounds;

                var newControl = await dispatcher.DispatchAsync(async() =>
                {
                    var newWindow    = Window.Current;
                    var newAppView   = ApplicationView.GetForCurrentView();
                    newAppView.Title = title;

                    if (ApiInformation.IsPropertyPresent("Windows.UI.ViewManagement.ApplicationView", "PersistedStateId"))
                    {
                        newAppView.PersistedStateId = "Floating";
                    }

                    var control       = ViewLifetimeControl.GetForCurrentView();
                    control.Released += (s, args) =>
                    {
                        if (parameter != null)
                        {
                            _windows.TryRemove(parameter, out IDispatcherContext _);
                        }

                        newWindow.Close();
                    };

                    var nav = BootStrapper.Current.NavigationServiceFactory(BootStrapper.BackButton.Ignore, BootStrapper.ExistingContent.Exclude, session, id, false);
                    control.NavigationService = nav;
                    nav.Navigate(page, parameter);
                    newWindow.Content = BootStrapper.Current.CreateRootElement(nav);
                    newWindow.Activate();

                    await ApplicationViewSwitcher
                    .TryShowAsStandaloneAsync(newAppView.Id, ViewSizePreference.Default, currentView.Id, size);
                    //newAppView.TryResizeView(new Windows.Foundation.Size(360, bounds.Height));
                    newAppView.TryResizeView(new Windows.Foundation.Size(360, 640));

                    return(control);
                }).ConfigureAwait(false);

                return(newControl);
            }
        }
Beispiel #24
0
        public async Task <ViewLifetimeControl> OpenAsync(Func <ViewLifetimeControl, UIElement> content, object parameter, double width, double height, ApplicationViewMode viewMode)
        {
            if (_windows.TryGetValue(parameter, out IDispatcherContext value))
            {
                var newControl = await value.DispatchAsync(async() =>
                {
                    var control    = ViewLifetimeControl.GetForCurrentView();
                    var newAppView = ApplicationView.GetForCurrentView();

                    var preferences        = ViewModePreferences.CreateDefault(viewMode);
                    preferences.CustomSize = new Size(width, height);

                    await ApplicationViewSwitcher
                    .TryShowAsViewModeAsync(newAppView.Id, viewMode, preferences);

                    return(control);
                }).ConfigureAwait(false);

                return(newControl);
            }
            else
            {
                var newView    = CoreApplication.CreateNewView();
                var dispatcher = new DispatcherContext(newView.Dispatcher);
                _windows[parameter] = dispatcher;

                var newControl = await dispatcher.DispatchAsync(async() =>
                {
                    var newWindow     = Window.Current;
                    newWindow.Closed += (s, args) =>
                    {
                        _windows.TryRemove(parameter, out _);
                    };
                    newWindow.CoreWindow.Closed += (s, args) =>
                    {
                        _windows.TryRemove(parameter, out _);
                    };

                    var newAppView           = ApplicationView.GetForCurrentView();
                    newAppView.Consolidated += (s, args) =>
                    {
                        _windows.TryRemove(parameter, out _);
                        newWindow.Close();
                    };

                    if (ApiInformation.IsPropertyPresent("Windows.UI.ViewManagement.ApplicationView", "PersistedStateId"))
                    {
                        newAppView.PersistedStateId = "Calls";
                    }

                    var control       = ViewLifetimeControl.GetForCurrentView();
                    control.Released += (s, args) =>
                    {
                        _windows.TryRemove(parameter, out _);
                        newWindow.Close();
                    };

                    newWindow.Content = content(control);
                    newWindow.Activate();

                    var preferences        = ViewModePreferences.CreateDefault(viewMode);
                    preferences.CustomSize = new Size(width, height);

                    await ApplicationViewSwitcher.TryShowAsViewModeAsync(newAppView.Id, viewMode, preferences);

                    return(control);
                }).ConfigureAwait(false);

                return(newControl);
            }
        }
 public AccountController()
 {
     var context = new DispatcherContext();
     db = context;
     idContext =context;
 }
Beispiel #26
0
 public override void ChannelActive(IChannelHandlerContext context)
 {
     // Reads always start out unblocked
     DispatcherContext.UnblockChannelReads(context);
     base.ChannelActive(context);
 }
Beispiel #27
0
        private async Task ProcessRequestAsync(
            long requestSequenceId,
            IChannelHandlerContext ctx,
            ThriftMessage message,
            TNiftyTransport messageTransport,
            TProtocol inProtocol,
            TProtocol outProtocol)
        {
            //Task.Run(() =>
            //{
            try
            {
                AtomicBoolean responseSent = new AtomicBoolean(false);
                // Use AtomicReference as a generic holder class to be able to mark it final
                // and pass into inner classes. Since we only use .get() and .set(), we don't
                // actually do any atomic operations.
                AtomicReference <ITimeout> expireTimeout = new AtomicReference <ITimeout>(null);
                try
                {
                    try
                    {
                        long timeRemaining = 0;
                        long timeElapsed   = (DateTime.UtcNow.Ticks - message.ProcessStartTimeTicks) / 10000;

                        if (_queueTimeoutMillis > 0)
                        {
                            if (timeElapsed >= _queueTimeoutMillis)
                            {
                                String error = "Task stayed on the queue for " + timeElapsed +
                                               " milliseconds, exceeding configured queue timeout of " + _queueTimeoutMillis +
                                               " milliseconds.";
                                _logger.LogWarning(error);
                                TApplicationException taskTimeoutException = new TApplicationException(
                                    ExceptionType.InternalError, error);
                                await SendTApplicationExceptionAsync(taskTimeoutException, ctx, message, requestSequenceId, messageTransport,
                                                                     inProtocol, outProtocol);

                                return;
                            }
                        }
                        else if (_taskTimeoutMillis > 0)
                        {
                            if (timeElapsed >= _taskTimeoutMillis)
                            {
                                String error = "Task stayed on the queue for " + timeElapsed +
                                               " milliseconds, exceeding configured task timeout of " + _taskTimeoutMillis +
                                               " milliseconds.";
                                _logger.LogWarning(error);
                                TApplicationException taskTimeoutException = new TApplicationException(
                                    ExceptionType.InternalError, error);
                                await SendTApplicationExceptionAsync(taskTimeoutException, ctx, message, requestSequenceId, messageTransport,
                                                                     inProtocol, outProtocol);

                                return;
                            }
                            else
                            {
                                timeRemaining = _taskTimeoutMillis - timeElapsed;
                            }
                        }

                        if (timeRemaining > 0)
                        {
                            expireTimeout.Value = _taskTimeoutTimer.NewTimeout(timeout =>
                            {
                                // The immediateFuture returned by processors isn't cancellable, cancel() and
                                // isCanceled() always return false. Use a flag to detect task expiration.
                                if (responseSent.CompareAndSet(false, true))
                                {
                                    TApplicationException ex = new TApplicationException(
                                        ExceptionType.InternalError,
                                        "Task timed out while executing."
                                        );
                                    // Create a temporary transport to send the exception
                                    var duplicateBuffer = message.Buffer.Duplicate();
                                    duplicateBuffer.ResetReaderIndex();
                                    using (TNiftyTransport temporaryTransport = new TNiftyTransport(
                                               ctx.Channel,
                                               duplicateBuffer,
                                               message.TransportType))
                                    {
                                        TProtocolPair protocolPair = _duplexProtocolFactory.GetProtocolPair(
                                            TTransportPair.FromSingleTransport(temporaryTransport));
                                        SendTApplicationExceptionAsync(ex, ctx, message,
                                                                       requestSequenceId,
                                                                       temporaryTransport,
                                                                       protocolPair.InputProtocol,
                                                                       protocolPair.OutputProtocol).GetAwaiter().GetResult();
                                    }
                                }
                            }, TimeSpan.FromMilliseconds(timeRemaining / 10000));
                        }
                        //SSL 部分暂时不处理
                        IConnectionContext connectionContext = ctx.Channel.GetConnectionContext();
                        IRequestContext    requestContext    = new NiftyRequestContext(connectionContext, inProtocol, outProtocol, messageTransport);
                        RequestContexts.SetCurrentContext(requestContext);
                        try
                        {
                            //关键部分:交给 Thrift 来处理二进制。
                            bool result = await _processorFactory.GetProcessor(messageTransport).ProcessAsync(inProtocol, outProtocol, requestContext);

                            DeleteExpirationTimer(expireTimeout.Value);
                            try
                            {
                                // Only write response if the client is still there and the task timeout
                                // hasn't expired.
                                if (ctx.Channel.Active && responseSent.CompareAndSet(false, true))
                                {
                                    ThriftMessage response = message.MessageFactory(
                                        messageTransport.OutBuffer);
                                    await WriteResponseAsync(ctx, response, requestSequenceId,
                                                             DispatcherContext.IsResponseOrderingRequired(ctx));
                                }
                            }
                            catch (Exception t)
                            {
                                this.OnDispatchException(ctx, t);
                            }
                        }
                        catch (Exception ex)
                        {
                            _logger.LogError(0, ex, "write response to client fault.");
                            DeleteExpirationTimer(expireTimeout.Value);
                            OnDispatchException(ctx, ex);
                        }
                    }
                    finally
                    {
                        RequestContexts.ClearCurrentContext();
                    }
                }
                catch (Exception ex)
                {
                    OnDispatchException(ctx, ex);
                    ex.ThrowIfNecessary();
                }
            }
            catch (Exception ex)
            {
                ex.ThrowIfNecessary();
            }

            //});
        }
        public static bool UpdateAll(string sectionName, bool isTestEnviroment)
        {
            try
            {
                Initialization.SetServices();
                Provider.SetSectionName(sectionName);
                var connectionString = ConfigurationManager.ConnectionStrings[sectionName].ConnectionString;
                DatabaseService.SetConnectionString(connectionString);
                var provider = Provider.Current();
                provider.Configuration();

                var count = provider.InitializeDb(connectionString);

                bool adminCreated;
                using (var accountDbContext = AccountDbContext.CreateFromConnectionString(connectionString))
                {
                    // обновляем справочники
                    var registrator = new AccountDbDataRegistator(accountDbContext);
                    registrator.RegisterAll();

                    // Проверим, создан ли админ
                    adminCreated = accountDbContext.GetUserRepository().QueryAll().FirstOrDefault(x => x.Roles.Any(y => y.RoleId == RoleId.AccountAdministrators)) != null;
                }

                if (count == 0)
                {
                    _logger.Info("База не изменилась");
                }
                else
                {
                    _logger.Info("База обновлена, установлено миграций: " + count);
                }

                if (adminCreated)
                {
                    _logger.Info("Администратор аккаунта уже создан");
                }
                else
                {
                    var accountInfo = ConfigDbServicesHelper.GetAccountService().GetSystemAccount();

                    using (var context = DispatcherContext.Create())
                    {
                        // создаем root компонент
                        var componentService = context.ComponentService;
                        componentService.CreateRoot(accountInfo.Id, accountInfo.RootId);

                        // создаем админа
                        Console.Write("Укажите EMail администратора: ");
                        var adminEMail = Console.ReadLine();

                        Console.Write("Укажите пароль администратора: ");
                        var adminPassword = Console.ReadLine();

                        var userService = context.UserService;

                        var adminUser = userService.CreateAccountAdmin(
                            accountInfo.Id,
                            adminEMail,
                            null, null, null, null, null);

                        // Установим пароль админа
                        var passwordToken = userService.StartResetPassword(adminUser.Id, false);
                        userService.EndResetPassword(accountInfo.Id, passwordToken, adminPassword);
                        context.SaveChanges();

                        _logger.Info($"Создан пользователь {adminEMail} с паролем {adminPassword}");
                    }

                    // Установим бесконечные лимиты аккаунта
                    var limits = SystemTariffLimits.BaseUnlimited;

                    using (var accountDbContext = AccountDbContext.CreateFromConnectionString(connectionString))
                    {
                        var accountTariffRepository = accountDbContext.GetAccountTariffRepository();
                        var tariffLimitRepository   = accountDbContext.GetTariffLimitRepository();

                        var tariff = new TariffLimit()
                        {
                            Type   = TariffLimitType.Soft,
                            Source = TariffLimitSource.Base,
                            Name   = "Soft",
                            EventsRequestsPerDay     = limits.EventRequestsPerDay,
                            EventsMaxDays            = limits.EventsMaxDays,
                            LogMaxDays               = limits.LogMaxDays,
                            LogSizePerDay            = limits.LogSizePerDay,
                            ComponentsMax            = limits.ComponentsMax,
                            ComponentTypesMax        = limits.ComponentTypesMax,
                            UnitTestTypesMax         = limits.UnitTestTypesMax,
                            HttpUnitTestsMaxNoBanner = limits.HttpChecksMaxNoBanner,
                            UnitTestsMax             = limits.UnitTestsMax,
                            UnitTestsRequestsPerDay  = limits.UnitTestsRequestsPerDay,
                            UnitTestsMaxDays         = limits.UnitTestsMaxDays,
                            MetricsMax               = limits.MetricsMax,
                            MetricsRequestsPerDay    = limits.MetricRequestsPerDay,
                            MetricsMaxDays           = limits.MetricsMaxDays,
                            StorageSizeMax           = limits.StorageSizeMax,
                            SmsPerDay = limits.SmsPerDay,
                        };

                        tariffLimitRepository.Add(tariff);

                        var accountTariff = new AccountTariff()
                        {
                            TariffLimit = tariff
                        };
                        accountTariffRepository.Add(accountTariff);

                        tariff = new TariffLimit()
                        {
                            Type   = TariffLimitType.Hard,
                            Source = TariffLimitSource.Base,
                            Name   = "Hard",
                            EventsRequestsPerDay     = limits.EventRequestsPerDay,
                            EventsMaxDays            = limits.EventsMaxDays,
                            LogMaxDays               = limits.LogMaxDays,
                            LogSizePerDay            = limits.LogSizePerDay,
                            ComponentsMax            = limits.ComponentsMax,
                            ComponentTypesMax        = limits.ComponentTypesMax,
                            UnitTestTypesMax         = limits.UnitTestTypesMax,
                            HttpUnitTestsMaxNoBanner = limits.HttpChecksMaxNoBanner,
                            UnitTestsMax             = limits.UnitTestsMax,
                            UnitTestsRequestsPerDay  = limits.UnitTestsRequestsPerDay,
                            UnitTestsMaxDays         = limits.UnitTestsMaxDays,
                            MetricsMax               = limits.MetricsMax,
                            MetricsRequestsPerDay    = limits.MetricRequestsPerDay,
                            MetricsMaxDays           = limits.MetricsMaxDays,
                            StorageSizeMax           = limits.StorageSizeMax,
                            SmsPerDay = limits.SmsPerDay,
                        };

                        tariffLimitRepository.Add(tariff);

                        accountTariff = new AccountTariff()
                        {
                            TariffLimit = tariff
                        };
                        accountTariffRepository.Add(accountTariff);

                        accountDbContext.SaveChanges();
                    }
                }

                _logger.Info("База успешно обновлена");

                return(true);
            }
            catch (Exception exception)
            {
                _logger.Fatal(exception);
                return(false);
            }
        }
        public void SendUnitTestAfterEnablingComponentTest()
        {
            // Создадим отключенный компонент и проверку до создания диспетчера
            Component component;
            Guid      unitTestId;
            var       account = TestHelper.GetTestAccount();

            using (var dispatcherContext = DispatcherContext.Create())
            {
                var testAccountContext = dispatcherContext.GetAccountDbContext(account.Id);
                var componentService   = dispatcherContext.ComponentService;
                component = componentService.GetOrCreateComponent(account.Id, new GetOrCreateComponentRequestData()
                {
                    DisplayName = Guid.NewGuid().ToString(),
                    SystemName  = Guid.NewGuid().ToString(),
                    TypeId      = SystemComponentTypes.Others.Id
                });
                componentService.DisableComponent(account.Id, component.Id, null, null);

                var unitTestTypeService = dispatcherContext.UnitTestTypeService;
                var unitTestType        = unitTestTypeService.GetOrCreateUnitTestType(account.Id, new GetOrCreateUnitTestTypeRequestData()
                {
                    SystemName  = "Main",
                    DisplayName = "Main"
                });

                var unitTestService = dispatcherContext.UnitTestService;
                var unitTestCache   = unitTestService.GetOrCreateUnitTest(account.Id, new GetOrCreateUnitTestRequestData()
                {
                    ComponentId    = component.Id,
                    SystemName     = Guid.NewGuid().ToString(),
                    DisplayName    = Guid.NewGuid().ToString(),
                    UnitTestTypeId = unitTestType.Id
                });

                unitTestId = unitTestCache.Id;

                unitTestService.SendUnitTestResult(account.Id, new SendUnitTestResultRequestData()
                {
                    UnitTestId            = unitTestCache.Id,
                    Result                = UnitTestResult.Unknown,
                    ActualIntervalSeconds = 60
                });
            }

            // Создадим диспетчер
            var dispatcher = TestHelper.GetDispatcherClient();

            // Включим компонент
            var componentEnableResponse = dispatcher.SetComponentEnable(account.Id, component.Id);

            componentEnableResponse.Check();

            // Проверим, что компонент стал серым
            var getComponentTotalStateResponse = dispatcher.GetComponentTotalState(account.Id, component.Id, true);
            var componentState = getComponentTotalStateResponse.Data;

            Assert.Equal(MonitoringStatus.Unknown, componentState.Status);

            // Отправим проверку
            var sendUnitTestResultResponse = dispatcher.SendUnitTestResult(account.Id, new SendUnitTestResultRequestData()
            {
                UnitTestId            = unitTestId,
                Result                = UnitTestResult.Success,
                ActualIntervalSeconds = 60,
                Message               = "OK"
            });

            sendUnitTestResultResponse.Check();

            // Проверим, что она отправилась
            var getUnitTestStateResponse = dispatcher.GetUnitTestState(account.Id, component.Id, unitTestId);
            var unitTestState            = getUnitTestStateResponse.Data;

            Assert.Equal(MonitoringStatus.Success, unitTestState.Status);

            // Проверим, что компонент стал зелёным
            getComponentTotalStateResponse = dispatcher.GetComponentTotalState(account.Id, component.Id, true);
            componentState = getComponentTotalStateResponse.Data;
            Assert.Equal(MonitoringStatus.Success, componentState.Status);
        }
 public static IAccountManagementService GetAccountManagementService(DispatcherContext context)
 {
     return(DependencyInjection.GetService <IAccountManagementService>(context));
 }
Beispiel #31
0
 public Repository(DispatcherContext context)
 {
     Context  = context;
     entities = Context.Set <TEntity>();
 }