]> git.ipfire.org Git - pbs.git/commitdiff
mirrors: Add log events
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 16 May 2023 15:42:30 +0000 (15:42 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 16 May 2023 15:42:30 +0000 (15:42 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/events.py
src/templates/events/modules/system-message.html
src/templates/mirrors/show.html

index 7fdb82af7f8a14123d32a0f7689a0177d1615418..388a3fd240ee1db329f174493d118e99b3666ec0 100644 (file)
@@ -43,6 +43,7 @@ log = logging.getLogger("pbs.events")
 # build_comment
 # build_group
 # job
+# mirror
 # user
 # by_user
 # builder
@@ -65,6 +66,7 @@ class Events(base.Object):
                                        NULL::integer AS build_comment,
                                        NULL::integer AS build_group,
                                        NULL::integer AS job,
+                                       NULL::integer AS mirror,
                                        NULL::integer AS user,
                                        builds.owner_id AS by_user,
                                        NULL::integer AS builder,
@@ -93,6 +95,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        NULL AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        NULL AS by_user,
                                        NULL AS builder,
@@ -115,6 +118,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        NULL AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        builds.deleted_by AS by_user,
                                        NULL AS builder,
@@ -138,6 +142,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        NULL AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        builds.deprecated_by AS by_user,
                                        NULL AS builder,
@@ -162,6 +167,7 @@ class Events(base.Object):
                                        build_comments.id AS build_comment,
                                        NULL AS build_group,
                                        NULL AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        build_comments.user_id AS by_user,
                                        NULL AS builder,
@@ -184,6 +190,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        NULL AS job,
+                                       NULL AS mirror,
                                        build_watchers.user_id AS user,
                                        NULL AS by_user,
                                        NULL AS builder,
@@ -204,6 +211,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        NULL AS job,
+                                       NULL AS mirror,
                                        build_watchers.user_id AS user,
                                        NULL AS by_user,
                                        NULL AS builder,
@@ -226,6 +234,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        NULL AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        repository_builds.added_by AS by_user,
                                        NULL AS builder,
@@ -246,6 +255,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        NULL AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        repository_builds.removed_by AS by_user,
                                        NULL AS builder,
@@ -269,6 +279,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        NULL AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        build_points.user_id AS by_user,
                                        NULL AS builder,
@@ -290,6 +301,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        build_groups.id AS build_group,
                                        NULL AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        NULL AS by_user,
                                        NULL AS builder,
@@ -318,6 +330,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        jobs.id AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        NULL AS by_user,
                                        NULL AS builder,
@@ -340,6 +353,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        jobs.id AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        NULL AS by_user,
                                        jobs.builder_id AS builder,
@@ -368,6 +382,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        jobs.id AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        NULL AS by_user,
                                        jobs.builder_id AS builder,
@@ -396,6 +411,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        jobs.id AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        jobs.aborted_by AS by_user,
                                        jobs.builder_id AS builder,
@@ -420,6 +436,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        jobs.id AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        NULL AS by_user,
                                        jobs.builder_id AS builder,
@@ -444,6 +461,7 @@ class Events(base.Object):
                                        NULL AS build_comment,
                                        NULL AS build_group,
                                        jobs.id AS job,
+                                       NULL AS mirror,
                                        NULL AS user,
                                        NULL AS by_user,
                                        NULL AS builder,
@@ -455,6 +473,88 @@ class Events(base.Object):
                                        jobs superseeded_jobs ON superseeded_jobs.superseeded_by = jobs.id
                                WHERE
                                        jobs.deleted_at IS NULL
+
+                               UNION ALL
+
+                               -- Mirrors Created
+                               SELECT
+                                       'mirror-created' AS type,
+                                       mirrors.created_at AS t,
+                                       5 AS priority,
+                                       NULL AS build,
+                                       NULL AS by_build,
+                                       NULL AS build_comment,
+                                       NULL AS build_group,
+                                       NULL AS job,
+                                       mirrors.id AS mirror,
+                                       NULL AS user,
+                                       mirrors.created_by AS by_user,
+                                       NULL AS builder,
+                                       NULL AS repository,
+                                       NULL AS points
+                               FROM
+                                       mirrors
+
+                               UNION ALL
+
+                               -- Mirrors Deleted
+                               SELECT
+                                       'mirror-deleted' AS type,
+                                       mirrors.deleted_at AS t,
+                                       5 AS priority,
+                                       NULL AS build,
+                                       NULL AS by_build,
+                                       NULL AS build_comment,
+                                       NULL AS build_group,
+                                       NULL AS job,
+                                       mirrors.id AS mirror,
+                                       NULL AS user,
+                                       mirrors.deleted_by AS by_user,
+                                       NULL AS builder,
+                                       NULL AS repository,
+                                       NULL AS points
+                               FROM
+                                       mirrors
+                               WHERE
+                                       deleted_at IS NOT NULL
+
+                               UNION ALL
+
+                               -- Mirror Status Changes
+                               SELECT
+                                       CASE
+                                               WHEN mirror_status_changes.new_status IS TRUE
+                                               THEN 'mirror-online'
+                                               WHEN mirror_status_changes.new_status IS FALSE
+                                               THEN 'mirror-offline'
+                                       END AS type,
+                                       mirror_status_changes.checked_at AS t,
+                                       4 AS priority,
+                                       NULL AS build,
+                                       NULL AS by_build,
+                                       NULL AS build_comment,
+                                       NULL AS build_group,
+                                       NULL AS job,
+                                       mirror_status_changes.mirror_id AS mirror,
+                                       NULL AS user,
+                                       NULL AS by_user,
+                                       NULL AS builder,
+                                       NULL AS repository,
+                                       NULL AS points
+                               FROM (
+                                       SELECT
+                                               mirror_checks.mirror_id AS mirror_id,
+                                               mirror_checks.checked_at AS checked_at,
+                                               mirror_checks.success AS new_status,
+                                               LAG(success) OVER (
+                                                       PARTITION BY mirror_id
+                                                       ORDER BY checked_at ASC
+                                               ) AS old_status
+                                       FROM
+                                               mirror_checks
+                                       ) mirror_status_changes
+                               WHERE
+                                       mirror_status_changes.old_status <> mirror_status_changes.new_status
                        )
                """)
 
@@ -474,6 +574,9 @@ class Events(base.Object):
                        # Jobs
                        "job"           : self.backend.jobs.get_by_id,
 
+                       # Mirrors
+                       "mirror"        : self.backend.mirrors.get_by_id,
+
                        # Repositories
                        "repository" : self.backend.repos.get_by_id,
 
@@ -527,7 +630,7 @@ class Events(base.Object):
                        yield Event(self.backend, event)
 
        def __call__(self, priority=None, offset=None, limit=None,
-                       build=None, builder=None, user=None):
+                       build=None, builder=None, mirror=None, user=None):
                """
                        Returns all events filtered by the given criteria
                """
@@ -543,6 +646,11 @@ class Events(base.Object):
                        conditions.append("events.builder = %s")
                        values.append(builder)
 
+               # Filter by mirror
+               if mirror:
+                       conditions.append("events.mirror = %s")
+                       values.append(mirror)
+
                # Filter by user
                if user:
                        conditions.append("(events.user = %s OR events.by_user = %s)")
index 115978731ac3a147cd5fa1a99ab822b96e21d74a..59def26f33e9361cee2701d1caaba069f73cb5b9 100644 (file)
                                <p class="icon is-large has-text-danger">
                                        <i class="fa-solid fa-2x fa-flask-vial"></i>
                                </p>
+                       {% elif event.type == "mirror-online" %}
+                               <p class="icon is-large has-text-success">
+                                       <i class="fa-solid fa-2x fa-server"></i>
+                               </p>
+                       {% elif event.type == "mirror-offline" %}
+                               <p class="icon is-large has-text-danger">
+                                       <i class="fa-solid fa-2x fa-server"></i>
+                               </p>
                        {% else %}
                                <p class="icon is-large has-text-light">
                                        <i class="fa-solid fa-2x fa-question"></i>
                                        {{ _("Job Dispatched") }}
                                {% elif event.type == "job-retry" %}
                                        {{ _("Job Restarted") }}
+                               {% elif event.type == "mirror-created" %}
+                                       {{ _("Mirror Created") }}
+                               {% elif event.type == "mirror-deleted" %}
+                                       {{ _("Mirror Deleted") }}
+                               {% elif event.type == "mirror-online" %}
+                                       {{ _("Mirror Came Online") }}
+                               {% elif event.type == "mirror-offline" %}
+                                       {{ _("Mirror Went Offline") }}
                                {% elif event.type == "repository-build-added" %}
                                        {{ _("Build has been added to repository %s") % event.repository }}
                                {% elif event.type == "repository-build-removed" %}
                                        </a>
                                {% end %}
 
+                               {# Mirror #}
+                               {% if event.mirror %}
+                                       <a class="level-item" href="/mirrors/{{ event.mirror.hostname }}">
+                                               {{ event.mirror }}
+                                       </a>
+                               {% end %}
+
                                {# Repository #}
                                {% if event.repository %}
                                        <a class="level-item" href="{{ event.repository.url }}">
index 2ca2106deeea4f39ec9973a531389b76ac528edf..7e70ac6d0baae0dff9547a6ab4d8abfc218203df 100644 (file)
                        </div>
                </section>
        {% end %}
+
+       {# Log #}
+       <section class="section">
+               <div class="container">
+                       <h5 class="title is-5">{{ _("Log") }}</h5>
+
+                       {% module EventsList(priority=4, mirror=mirror) %}
+               </div>
+       </section>
 {% end block %}