diff --git a/src/site/markdown/development.md b/src/site/markdown/development.md
index 6fcdf9efb798836c2d72e3080e253ed32e79ff01..7266414ebdd55887ae57945f917226eea18e4cc4 100644
--- a/src/site/markdown/development.md
+++ b/src/site/markdown/development.md
@@ -102,3 +102,14 @@ To run static analyses: `mvn checkstyle:checkstyle pmd:pmd pmd:cpd`.
 
 To run one test class: `mvn test -DfailIfNoTests=false -Dsurefire.failIfNoSpecifiedTests=false -Dtest=fr.agrometinfo.www.server.rs.IndicatorResourceTest`.
 
+## Check SAVA response from servlet
+
+These are values from [SAVA README.md](https://forgemia.inra.fr/agroclim/sava/-/blob/main/README.md?ref_type=heads), they must be adapted.
+Port 8080 is the default for Tomcat in Eclipse.
+
+```sh
+SAVA_KEY="HldIAeGvVxgxFcBj8z2j"
+SAVA_PASS="AfEy82sBOD0yVvUeoMM6"
+BASE64_AUTH=$(echo -n "$SAVA_KEY:$SAVA_PASS" | base64)
+curl http://localhost:8080/www-server/metrics --header "Authorization: Basic $BASE64_AUTH"
+```
diff --git a/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyVisitDao.java b/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyVisitDao.java
index f8709715009068f78b7b16193945536a6be63202..ba64f70c841a7a743144753e3ceba5e1d69a6e96 100644
--- a/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyVisitDao.java
+++ b/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyVisitDao.java
@@ -15,6 +15,14 @@ public interface DailyVisitDao {
      */
     List<DailyVisit> findAll();
 
+    /**
+     * Get the total number of visits for the environment.
+     *
+     * @param environment code
+     * @return total number of visits for the environment
+     */
+    Long getTotalNumberOfVisits(String environment);
+
     /**
      * Increment the daily value if exists or add a new row with 1 as total number
      * of visits.
diff --git a/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyVisitDaoHibernate.java b/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyVisitDaoHibernate.java
index 6e9979f2c766711a1715aa8e60f82215b19cce20..85b33fc3913c6287796227e45251b065fcb230a1 100644
--- a/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyVisitDaoHibernate.java
+++ b/www-server/src/main/java/fr/agrometinfo/www/server/dao/DailyVisitDaoHibernate.java
@@ -1,5 +1,7 @@
 package fr.agrometinfo.www.server.dao;
 
+import java.util.Map;
+
 import fr.agrometinfo.www.server.model.DailyVisit;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.transaction.Transactional;
@@ -11,17 +13,23 @@ import jakarta.transaction.Transactional;
  */
 @ApplicationScoped
 public class DailyVisitDaoHibernate extends DaoHibernate<DailyVisit> implements DailyVisitDao {
+    /**
+     * Query parameter.
+     */
+    private static final String PARAM_ENVIRONMENT = "environment";
+
     /**
      * Statement to insert a new row.
      */
     private static final String INSERT_SQL = """
             INSERT INTO dailyvisit (date, environment, number) VALUES (CURRENT_DATE, :environment, 1)
             """;
+
     /**
      * Statement to increment.
      */
     private static final String UPDATE_SQL = """
-            UPDATE dailyvisit SET number=number+1 WHERE date=CURRENT_DATE and environment=:environment
+            UPDATE dailyvisit SET number=number+1 WHERE date=CURRENT_DATE AND environment=:environment
             """;
 
     /**
@@ -31,6 +39,12 @@ public class DailyVisitDaoHibernate extends DaoHibernate<DailyVisit> implements
         super(DailyVisit.class);
     }
 
+    @Override
+    public final Long getTotalNumberOfVisits(final String environment) {
+        final var sql = "SELECT COALESCE(SUM(number), 0) FROM dailyvisit WHERE environment=?1";
+        return findFirstScalar(sql, Map.of(1, environment));
+    }
+
     @Transactional
     @Override
     public final void increment(final String environment) {
@@ -38,11 +52,11 @@ public class DailyVisitDaoHibernate extends DaoHibernate<DailyVisit> implements
         // MERGE is available in PostgreSQL >= 14 and H2
         doInJpaTransaction(em -> {
             var query = em.createNativeQuery(UPDATE_SQL);
-            query.setParameter("environment", environment);
+            query.setParameter(PARAM_ENVIRONMENT, environment);
             final var nb = query.executeUpdate();
             if (nb == 0) {
                 query = em.createNativeQuery(INSERT_SQL);
-                query.setParameter("environment", environment);
+                query.setParameter(PARAM_ENVIRONMENT, environment);
                 query.executeUpdate();
             }
         });
diff --git a/www-server/src/main/java/fr/agrometinfo/www/server/dao/DaoHibernate.java b/www-server/src/main/java/fr/agrometinfo/www/server/dao/DaoHibernate.java
index 856d1ff41dfe027e66320c99ced69fdf4020e990..3f2acc51a7f535af4ff705219273f68af65b0229 100644
--- a/www-server/src/main/java/fr/agrometinfo/www/server/dao/DaoHibernate.java
+++ b/www-server/src/main/java/fr/agrometinfo/www/server/dao/DaoHibernate.java
@@ -317,19 +317,17 @@ class DaoHibernate<T> {
      * @return size of all content of a schema, in bytes
      */
     public BigDecimal getSchemaSize(final String schema) {
-        try (ScopedEntityManager em = getScopedEntityManager()) {
-            if (isPostgreSQLDriver()) {
+        if (isPostgreSQLDriver()) {
+            try (ScopedEntityManager em = getScopedEntityManager()) {
                 final String sql = """
                         SELECT
                         SUM(pg_total_relation_size(CONCAT(quote_ident(schemaname), '.', quote_ident(tablename))))
-                        FROM pg_catalog.pg_tables WHERE schemaname=:schema
+                        FROM pg_catalog.pg_tables WHERE schemaname=?1
                         """;
-                final Query query = em.createNativeQuery(sql);
-                query.setParameter("schema", schema);
-                return (BigDecimal) query.getSingleResult();
-            } else {
-                throw new UnsupportedOperationException("Database driver not handled! " + getDriver());
+                return findFirstScalar(sql, Map.of(1, schema));
             }
+        } else {
+            throw new UnsupportedOperationException("Database driver not handled! " + getDriver());
         }
     }
 
diff --git a/www-server/src/main/java/fr/agrometinfo/www/server/scheduled/BackgroundJobManager.java b/www-server/src/main/java/fr/agrometinfo/www/server/scheduled/BackgroundJobManager.java
index a70b4b81f3a1addafcff0bad1a6a168d7e97f37b..e8e63839e6872081c353155a7b7b7699725f943f 100644
--- a/www-server/src/main/java/fr/agrometinfo/www/server/scheduled/BackgroundJobManager.java
+++ b/www-server/src/main/java/fr/agrometinfo/www/server/scheduled/BackgroundJobManager.java
@@ -10,6 +10,9 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import fr.agroclim.sava.core.SavaUtils;
+import fr.agrometinfo.www.server.AgroMetInfoConfiguration;
+import fr.agrometinfo.www.server.AgroMetInfoConfiguration.ConfigurationKey;
+import fr.agrometinfo.www.server.dao.DailyVisitDao;
 import fr.agrometinfo.www.server.dao.IndicatorDao;
 import fr.agrometinfo.www.server.dao.PersistenceManager;
 import jakarta.inject.Inject;
@@ -54,6 +57,18 @@ public class BackgroundJobManager implements ServletContextListener {
         return Duration.between(now, next).getSeconds();
     }
 
+    /**
+     * Application configuration.
+     */
+    @Inject
+    private AgroMetInfoConfiguration configuration;
+
+    /**
+     * DAO providing total number of visits.
+     */
+    @Inject
+    private DailyVisitDao dailyVisitDao;
+
     /**
      * DAO providing database details.
      */
@@ -87,6 +102,8 @@ public class BackgroundJobManager implements ServletContextListener {
     private void initMetrics() {
         SavaUtils.addGauge("schema_size", "Database schema size, in bytes", "schema_name");
         SavaUtils.addCounter("visits", "Number of visits", null);
+        final var environment = configuration.get(ConfigurationKey.ENVIRONMENT);
+        SavaUtils.incrementCounter("visits", null, dailyVisitDao.getTotalNumberOfVisits(environment).doubleValue());
     }
 
     /**
diff --git a/www-server/src/test/java/fr/agrometinfo/www/server/dao/DailyVisitDaoHibernateTest.java b/www-server/src/test/java/fr/agrometinfo/www/server/dao/DailyVisitDaoHibernateTest.java
index 1da6967a10a51ef62ff60f37dbd73c39c15bef1e..9cd97a74db3594a6254cba305d561ed575fbccac 100644
--- a/www-server/src/test/java/fr/agrometinfo/www/server/dao/DailyVisitDaoHibernateTest.java
+++ b/www-server/src/test/java/fr/agrometinfo/www/server/dao/DailyVisitDaoHibernateTest.java
@@ -36,4 +36,20 @@ class DailyVisitDaoHibernateTest {
         assertFalse(actual.isEmpty());
         assertEquals(2, actual.get(0).getNumber());
     }
+
+    @Test
+    void getTotalNumberOfVisits() {
+        final var environment = "test2";
+        Long actual = dao.getTotalNumberOfVisits(environment);
+        // when no visit is done: 0
+        assertEquals(0L, actual);
+
+        dao.increment(environment);
+        actual = dao.getTotalNumberOfVisits(environment);
+        assertEquals(1L, actual);
+
+        dao.increment(environment);
+        actual = dao.getTotalNumberOfVisits(environment);
+        assertEquals(2L, actual);
+    }
 }