diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 99932f98a3b0c884ebfdf9c2b323a7bf2c248040..d1b15880d74fa18f86cac269b3ad0fa519b6bd9d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,7 +3,7 @@ image: docker:19.03.1 variables: DOCKER_TLS_CERTDIR: "/certs" IMAGE_TAG: $CI_REGISTRY_IMAGE - IMAGE_VER: 1.0.1 + IMAGE_VER: 1.1.0 services: - docker:19.03.1-dind diff --git a/lib/CF/Controller/Websockets.pm b/lib/CF/Controller/Websockets.pm index 8647e9dfa32a0d8b88788b5dd3a4cf1bffc333d1..789f4262e912973614739f6891487ac9c1a6c2ec 100644 --- a/lib/CF/Controller/Websockets.pm +++ b/lib/CF/Controller/Websockets.pm @@ -3,6 +3,7 @@ package CF::Controller::Websockets; use Mojo::Base 'Mojolicious::Controller'; use Mojo::Pg::PubSub; use Digest::SHA qw(hmac_sha1_hex); +use POSIX qw(ceil); use feature 'signatures'; no warnings qw{ experimental::signatures }; @@ -44,13 +45,18 @@ sub main { my $all = $c->schema->resultset('Socket_view')->count( { is_alive => 't', } ); + my $members = $c->schema->resultset('Socket_view')->count( { is_alive => 't', is_member => 't' } ); + my $group_size = $c->_member_group_size($members); + $c->send({json => { event => 'online_users_updated', payload => { - all => $all, - members => $members, + all => $all, + members => $members, + group_size_full => $group_size->{full}, + group_size_half => $group_size->{half}, }}}); if ( $user ) { @@ -71,4 +77,18 @@ sub main { }); } +sub _member_group_size ($c, $total = 0){ + my $group = 2 * sqrt($total); + my $min = $total / 100; + my $max = $total / 5; + + $group = $min if $group < $min; + $group = $max if $group > $max; + + return { + full => ceil( $group ), + half => ceil( $group/2 ), + }; +} + 1;