public async Task <int> GetMaxUsersNumberAsync()
        {
            // Init data
            if (_totalUsersCount == -1)
            {
                _totalUsersCount = await _twitterUserDal.GetTwitterUsersCountAsync();

                var warmUpMaxCapacity = _instanceSettings.MaxUsersCapacity / 4;
                _warmUpIterations = warmUpMaxCapacity == 0 ? 0 : (int)(_totalUsersCount / (float)warmUpMaxCapacity);
            }

            // Return if warm up ended
            if (_warmUpIterations <= 0)
            {
                return(_instanceSettings.MaxUsersCapacity);
            }

            // Calculate warm up value
            var maxUsers = _warmUpIterations > 0
                ? _instanceSettings.MaxUsersCapacity / 4
                : _instanceSettings.MaxUsersCapacity;

            _warmUpIterations--;
            return(maxUsers);
        }
Beispiel #2
0
        public async Task <IActionResult> Index()
        {
            var stats = new Models.StatisticsModels.Statistics
            {
                FollowersCount       = await _followersDal.GetFollowersCountAsync(),
                TwitterUserCount     = await _twitterUserDal.GetTwitterUsersCountAsync(),
                TwitterStatistics    = _twitterStatistics.GetStatistics(),
                ExtractionStatistics = _extractionStatistics.GetStatistics(),
            };

            return(View(stats));
        }
        public async Task <CachedStatistics> GetStatisticsAsync()
        {
            if (_cachedStatistics == null ||
                (DateTime.UtcNow - _cachedStatistics.RefreshedTime).TotalMinutes > 15)
            {
                var twitterUserMax   = _instanceSettings.MaxUsersCapacity;
                var twitterUserCount = await _twitterUserDal.GetTwitterUsersCountAsync();

                var saturation = (int)((double)twitterUserCount / twitterUserMax * 100);

                _cachedStatistics = new CachedStatistics
                {
                    RefreshedTime = DateTime.UtcNow,
                    Saturation    = saturation
                };
            }

            return(_cachedStatistics);
        }
        public async Task <IActionResult> NodeInfo(string id)
        {
            var version           = System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString(3);
            var twitterUsersCount = await _twitterUserDal.GetTwitterUsersCountAsync();

            if (id == "2.0")
            {
                var nodeInfo = new NodeInfoV20
                {
                    version = "2.0",
                    usage   = new Usage()
                    {
                        localPosts = 0,
                        users      = new Users()
                        {
                            total = twitterUsersCount
                        }
                    },
                    software = new Software()
                    {
                        name    = "birdsitelive",
                        version = version
                    },
                    protocols = new[]
                    {
                        "activitypub"
                    },
                    openRegistrations = false,
                    services          = new Models.WellKnownModels.Services()
                    {
                        inbound  = new object[0],
                        outbound = new object[0]
                    },
                    metadata = new Metadata()
                    {
                        email = _settings.AdminEmail
                    }
                };
                return(new JsonResult(nodeInfo));
            }
            if (id == "2.1")
            {
                var nodeInfo = new NodeInfoV21
                {
                    version = "2.1",
                    usage   = new Usage()
                    {
                        localPosts = 0,
                        users      = new Users()
                        {
                            total = twitterUsersCount
                        }
                    },
                    software = new SoftwareV21()
                    {
                        name       = "birdsitelive",
                        version    = version,
                        repository = "https://github.com/NicolasConstant/BirdsiteLive"
                    },
                    protocols = new[]
                    {
                        "activitypub"
                    },
                    openRegistrations = false,
                    services          = new Models.WellKnownModels.Services()
                    {
                        inbound  = new object[0],
                        outbound = new object[0]
                    },
                    metadata = new Metadata()
                    {
                        email = _settings.AdminEmail
                    }
                };
                return(new JsonResult(nodeInfo));
            }

            return(NotFound());
        }