コード例 #1
0
        public static IdentityBuilder AddIdentityMongoDbProvider <TUser, TRole>(this IServiceCollection services,
                                                                                Action <IdentityOptions> setupIdentityAction, Action <MongoIdentityOptions> setupDatabaseAction) where TUser : ApplicationUser
            where TRole : Role
        {
            MongoIdentityOptions dbOptions = new MongoIdentityOptions();

            setupDatabaseAction(dbOptions);

            IdentityBuilder builder = services.AddIdentity <TUser, TRole>(setupIdentityAction ?? (x => { }));

            builder.AddRoleStore <RoleStore <TRole> >()
            .AddUserStore <UserStore <TUser, TRole> >()
            .AddUserManager <UserManager <TUser> >()
            .AddRoleManager <RoleManager <TRole> >()
            .AddDefaultTokenProviders();

            IMongoCollection <TUser> userCollection = MongoUtil.FromConnectionString <TUser>(dbOptions.ConnectionString, dbOptions.DatabaseName, dbOptions.UsersCollection);
            IMongoCollection <TRole> roleCollection = MongoUtil.FromConnectionString <TRole>(dbOptions.ConnectionString, dbOptions.DatabaseName, dbOptions.RolesCollection);

            services.AddSingleton(x => userCollection);
            services.AddSingleton(x => roleCollection);

            // Identity Services
            services.AddTransient <IUserStore <TUser> >(x => new UserStore <TUser, TRole>(userCollection, roleCollection, x.GetService <ILookupNormalizer>()));
            services.AddTransient <IRoleStore <TRole> >(x => new RoleStore <TRole>(roleCollection));

            Task <System.Collections.Generic.List <TUser> > all = userCollection.All();

            all.Wait();

            return(builder);
        }
コード例 #2
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                await Task.Delay(1000, stoppingToken);

                var nodes = nodesCol.All();
                foreach (var node in nodes)
                {
                    if (stoppingToken.IsCancellationRequested)
                    {
                        break;
                    }

                    var lastStatus = statusCol.Find(s => s.NodeId == node.Id).SortByDescending(s => s.LastTime).FirstOrDefault(cancellationToken: stoppingToken);

                    if (node.CheckMechanism == NetworkNode.CheckMechanismEnum.Ping)
                    {
                        Ping p = new Ping();
                        try
                        {
                            if (lastStatus == null)
                            {
                                lastStatus = NewStatus(node.Id);
                            }
                            var reply = await p.SendPingAsync(node.Address, 2000);

                            if (lastStatus.IpStatus != reply.Status)
                            {
                                lastStatus = NewStatus(node.Id);
                            }
                            lastStatus.IpStatus = reply.Status;
                        }
                        catch (Exception ex)
                        {
                            lastStatus.ErrorMessage = GetErrorMessages(ex);
                        }
                    }
                    else if (node.CheckMechanism == NetworkNode.CheckMechanismEnum.Http)
                    {
                        var httpClient = httpClientFactory.CreateClient();
                        try
                        {
                            string address = node.Address;
                            if (!address.StartsWith("http"))
                            {
                                address = "http://" + node.Address;
                            }
                            if (lastStatus == null)
                            {
                                lastStatus = NewStatus(node.Id);
                            }
                            var reply = await httpClient.GetAsync(address, stoppingToken);

                            if (lastStatus.HttpStatus != reply.StatusCode)
                            {
                                lastStatus = NewStatus(node.Id);
                            }
                            lastStatus.HttpStatus = reply.StatusCode;
                        }
                        catch (Exception ex)
                        {
                            lastStatus.ErrorMessage = GetErrorMessages(ex);
                        }
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }

                    // Send alert if required:

                    if (!lastStatus.IsSuccess &&
                        (lastStatus.AlertSendTime == null || DateTime.Now - lastStatus.AlertSendTime > TimeSpan.FromMinutes(alertResendMinutes)) &&
                        DateTime.Now - lastStatus.StartTime > TimeSpan.FromSeconds(errorWaitSeconds))
                    {
                        var content   = alertContent.Replace("{nodeName}", node.Name);
                        var receivers = new HashSet <string>();
                        if (node.AlertReceivers != null)
                        {
                            foreach (var dest in node.AlertReceivers)
                            {
                                if (!receivers.Contains(dest))
                                {
                                    await alertSender.Send(node.Id, dest, content);

                                    receivers.Add(dest);
                                }
                            }
                        }
                        foreach (var dest in (await alertReceiversCol.AllAsync()).Select(r => r.Address))
                        {
                            if (!receivers.Contains(dest))
                            {
                                await alertSender.Send(node.Id, dest, content);

                                receivers.Add(dest);
                            }
                        }
                        lastStatus.AlertSendTime = DateTime.Now;
                    }

                    lastStatus.LastTime = DateTime.Now;
                    await statusCol.SaveAsync(lastStatus);
                }
            }
        }