Add local groups as statistics
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
parent
2dccd5eccd
commit
a600720062
|
@ -6,6 +6,7 @@ export const STATISTICS = gql`
|
||||||
numberOfUsers
|
numberOfUsers
|
||||||
numberOfEvents
|
numberOfEvents
|
||||||
numberOfComments
|
numberOfComments
|
||||||
|
numberOfGroups
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
|
@ -2,4 +2,5 @@ export interface IStatistics {
|
||||||
numberOfUsers: number;
|
numberOfUsers: number;
|
||||||
numberOfEvents: number;
|
numberOfEvents: number;
|
||||||
numberOfComments: number;
|
numberOfComments: number;
|
||||||
|
numberOfGroups: number;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,9 @@
|
||||||
<i18n tag="p" path="Home to {number} users">
|
<i18n tag="p" path="Home to {number} users">
|
||||||
<strong slot="number">{{ statistics.numberOfUsers }}</strong>
|
<strong slot="number">{{ statistics.numberOfUsers }}</strong>
|
||||||
</i18n>
|
</i18n>
|
||||||
|
<i18n tag="p" path="and {number} groups">
|
||||||
|
<strong slot="number">{{ statistics.numberOfGroups }}</strong>
|
||||||
|
</i18n>
|
||||||
<i18n tag="p" path="Who published {number} events">
|
<i18n tag="p" path="Who published {number} events">
|
||||||
<strong slot="number">{{ statistics.numberOfEvents }}</strong>
|
<strong slot="number">{{ statistics.numberOfEvents }}</strong>
|
||||||
</i18n>
|
</i18n>
|
||||||
|
@ -135,10 +138,11 @@ section {
|
||||||
&.contact-statistics {
|
&.contact-statistics {
|
||||||
margin: 2px auto;
|
margin: 2px auto;
|
||||||
.statistics {
|
.statistics {
|
||||||
display: flex;
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, 150px);
|
||||||
|
grid-template-rows: repeat(2, 1fr);
|
||||||
p {
|
p {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
flex: 1;
|
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
|
|
||||||
& > * {
|
& > * {
|
||||||
|
|
|
@ -13,7 +13,8 @@ defmodule Mobilizon.GraphQL.Resolvers.Statistics do
|
||||||
%{
|
%{
|
||||||
number_of_users: StatisticsModule.get_cached_value(:local_users),
|
number_of_users: StatisticsModule.get_cached_value(:local_users),
|
||||||
number_of_events: StatisticsModule.get_cached_value(:local_events),
|
number_of_events: StatisticsModule.get_cached_value(:local_events),
|
||||||
number_of_comments: StatisticsModule.get_cached_value(:local_comments)
|
number_of_comments: StatisticsModule.get_cached_value(:local_comments),
|
||||||
|
number_of_groups: StatisticsModule.get_cached_value(:local_groups)
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,6 +12,7 @@ defmodule Mobilizon.GraphQL.Schema.StatisticsType do
|
||||||
field(:number_of_users, :integer, description: "The number of local users")
|
field(:number_of_users, :integer, description: "The number of local users")
|
||||||
field(:number_of_events, :integer, description: "The number of local events")
|
field(:number_of_events, :integer, description: "The number of local events")
|
||||||
field(:number_of_comments, :integer, description: "The number of local comments")
|
field(:number_of_comments, :integer, description: "The number of local comments")
|
||||||
|
field(:number_of_groups, :integer, description: "The number of local groups")
|
||||||
end
|
end
|
||||||
|
|
||||||
object :statistics_queries do
|
object :statistics_queries do
|
||||||
|
|
|
@ -603,6 +603,25 @@ defmodule Mobilizon.Actors do
|
||||||
"""
|
"""
|
||||||
def delete_group!(%Actor{type: :Group} = group), do: Repo.delete!(group)
|
def delete_group!(%Actor{type: :Group} = group), do: Repo.delete!(group)
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Counts the local groups
|
||||||
|
"""
|
||||||
|
@spec count_local_groups :: integer()
|
||||||
|
def count_local_groups do
|
||||||
|
groups_query()
|
||||||
|
|> filter_local()
|
||||||
|
|> Repo.aggregate(:count)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Counts all the groups
|
||||||
|
"""
|
||||||
|
@spec count_groups :: integer()
|
||||||
|
def count_groups do
|
||||||
|
groups_query()
|
||||||
|
|> Repo.aggregate(:count)
|
||||||
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Lists the groups.
|
Lists the groups.
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -288,6 +288,12 @@ defmodule Mobilizon.Discussions do
|
||||||
@spec count_local_comments :: integer
|
@spec count_local_comments :: integer
|
||||||
def count_local_comments, do: Repo.one(count_local_comments_query())
|
def count_local_comments, do: Repo.one(count_local_comments_query())
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Counts all comments.
|
||||||
|
"""
|
||||||
|
@spec count_comments :: integer
|
||||||
|
def count_comments, do: Repo.one(count_comments_query())
|
||||||
|
|
||||||
def get_discussion(discussion_id) do
|
def get_discussion(discussion_id) do
|
||||||
Discussion
|
Discussion
|
||||||
|> Repo.get(discussion_id)
|
|> Repo.get(discussion_id)
|
||||||
|
@ -424,6 +430,15 @@ defmodule Mobilizon.Discussions do
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec count_comments_query :: Ecto.Query.t()
|
||||||
|
defp count_comments_query do
|
||||||
|
from(
|
||||||
|
c in Comment,
|
||||||
|
select: count(c.id),
|
||||||
|
where: c.visibility in ^@public_visibility
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
@spec preload_for_comment(Ecto.Query.t()) :: Ecto.Query.t()
|
@spec preload_for_comment(Ecto.Query.t()) :: Ecto.Query.t()
|
||||||
defp preload_for_comment(query), do: preload(query, ^@comment_preloads)
|
defp preload_for_comment(query), do: preload(query, ^@comment_preloads)
|
||||||
end
|
end
|
||||||
|
|
|
@ -491,6 +491,17 @@ defmodule Mobilizon.Events do
|
||||||
|> Repo.one()
|
|> Repo.one()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Counts all events.
|
||||||
|
"""
|
||||||
|
@spec count_events :: integer
|
||||||
|
def count_events do
|
||||||
|
count_events_query()
|
||||||
|
|> filter_unlisted_and_public_visibility()
|
||||||
|
|> filter_draft()
|
||||||
|
|> Repo.one()
|
||||||
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Builds a page struct for events by their name.
|
Builds a page struct for events by their name.
|
||||||
"""
|
"""
|
||||||
|
@ -1417,6 +1428,11 @@ defmodule Mobilizon.Events do
|
||||||
from(e in Event, select: count(e.id), where: e.local == ^true)
|
from(e in Event, select: count(e.id), where: e.local == ^true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec count_events_query :: Ecto.Query.t()
|
||||||
|
defp count_events_query do
|
||||||
|
from(e in Event, select: count(e.id))
|
||||||
|
end
|
||||||
|
|
||||||
@spec tag_by_slug_query(String.t()) :: Ecto.Query.t()
|
@spec tag_by_slug_query(String.t()) :: Ecto.Query.t()
|
||||||
defp tag_by_slug_query(slug) do
|
defp tag_by_slug_query(slug) do
|
||||||
from(t in Tag, where: t.slug == ^slug)
|
from(t in Tag, where: t.slug == ^slug)
|
||||||
|
@ -1537,7 +1553,7 @@ defmodule Mobilizon.Events do
|
||||||
from(
|
from(
|
||||||
p in Participant,
|
p in Participant,
|
||||||
where: p.event_id == ^event_id,
|
where: p.event_id == ^event_id,
|
||||||
preload: [:actor]
|
preload: [:actor, :event]
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ defmodule Mobilizon.Service.Statistics do
|
||||||
A module that provides cached statistics
|
A module that provides cached statistics
|
||||||
"""
|
"""
|
||||||
|
|
||||||
alias Mobilizon.{Discussions, Events, Users}
|
alias Mobilizon.{Actors, Discussions, Events, Users}
|
||||||
|
|
||||||
def get_cached_value(key) do
|
def get_cached_value(key) do
|
||||||
case Cachex.fetch(:statistics, key, fn key ->
|
case Cachex.fetch(:statistics, key, fn key ->
|
||||||
|
@ -28,4 +28,20 @@ defmodule Mobilizon.Service.Statistics do
|
||||||
defp create_cache(:local_comments) do
|
defp create_cache(:local_comments) do
|
||||||
Discussions.count_local_comments()
|
Discussions.count_local_comments()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp create_cache(:local_groups) do
|
||||||
|
Actors.count_local_groups()
|
||||||
|
end
|
||||||
|
|
||||||
|
defp create_cache(:federation_events) do
|
||||||
|
Events.count_events()
|
||||||
|
end
|
||||||
|
|
||||||
|
defp create_cache(:federation_comments) do
|
||||||
|
Discussions.count_comments()
|
||||||
|
end
|
||||||
|
|
||||||
|
defp create_cache(:federation_groups) do
|
||||||
|
Actors.count_groups()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue