From: lukasz-jarocki-sonarsource Date: Mon, 15 Jul 2024 14:33:09 +0000 (+0200) Subject: SONAR-22479 moved 'user_enabled' metric to sonar-telemetry X-Git-Tag: 10.7.0.96327~331 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=34cf59a340ea31410cbb60019e6e445e9d8d2929;p=sonarqube.git SONAR-22479 moved 'user_enabled' metric to sonar-telemetry --- diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/telemetry/package-info.java b/server/sonar-server-common/src/main/java/org/sonar/server/telemetry/package-info.java deleted file mode 100644 index a1adc893867..00000000000 --- a/server/sonar-server-common/src/main/java/org/sonar/server/telemetry/package-info.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -@ParametersAreNonnullByDefault -package org.sonar.server.telemetry; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/server/sonar-telemetry/src/it/java/org/sonar/telemetry/legacy/user/TelemetryUserEnabledProviderIT.java b/server/sonar-telemetry/src/it/java/org/sonar/telemetry/legacy/user/TelemetryUserEnabledProviderIT.java new file mode 100644 index 00000000000..255ebefec23 --- /dev/null +++ b/server/sonar-telemetry/src/it/java/org/sonar/telemetry/legacy/user/TelemetryUserEnabledProviderIT.java @@ -0,0 +1,79 @@ +/* + * SonarQube + * Copyright (C) 2009-2024 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.telemetry.legacy.user; + +import java.util.Map; +import org.assertj.core.api.Assertions; +import org.junit.Rule; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.sonar.api.impl.utils.AlwaysIncreasingSystem2; +import org.sonar.api.utils.System2; +import org.sonar.db.DbTester; +import org.sonar.telemetry.user.TelemetryUserEnabledProvider; + +class TelemetryUserEnabledProviderIT { + + private final System2 system2 = new AlwaysIncreasingSystem2(); + + @Rule + public final DbTester db = DbTester.create(system2); + + + private final TelemetryUserEnabledProvider underTest = new TelemetryUserEnabledProvider(db.getDbClient()); + + @BeforeEach + public void beforeEach() { + db.executeUpdateSql("delete from users"); + } + + @Test + void getUuidValues_whenNoUsersInDatabase_shouldReturnEmptyMap() { + Map uuidValues = underTest.getUuidValues(); + + Assertions.assertThat(uuidValues).isEmpty(); + } + + @Test + void getUuidValues_whenSomeUsersActive_shouldReturnBothBooleanValues() { + db.users().insertUser(user -> user.setUuid("uuid1").setActive(true)); + db.users().insertUser(user -> user.setUuid("uuid1").setActive(false)); + db.getSession().commit(); + + Map uuidValues = underTest.getUuidValues(); + + Assertions.assertThat(uuidValues).hasSize(2); + Assertions.assertThat(uuidValues.values().stream().filter(Boolean::booleanValue)).hasSize(1); + Assertions.assertThat(uuidValues.values().stream().filter(b -> !b)).hasSize(1); + } + + @Test + void getUuidValues_when10ActiveUsers_shouldReturn10BooleanValues() { + for (int i = 0; i < 10; i++) { + db.users().insertUser(user -> user.setActive(true)); + } + db.getSession().commit(); + + Map uuidValues = underTest.getUuidValues(); + + Assertions.assertThat(uuidValues).hasSize(10); + Assertions.assertThat(uuidValues.values().stream().filter(Boolean::booleanValue)).hasSize(10); + } +} diff --git a/server/sonar-telemetry/src/main/java/org/sonar/telemetry/user/TelemetryUserEnabledProvider.java b/server/sonar-telemetry/src/main/java/org/sonar/telemetry/user/TelemetryUserEnabledProvider.java new file mode 100644 index 00000000000..aa7d715d949 --- /dev/null +++ b/server/sonar-telemetry/src/main/java/org/sonar/telemetry/user/TelemetryUserEnabledProvider.java @@ -0,0 +1,79 @@ +/* + * SonarQube + * Copyright (C) 2009-2024 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.telemetry.user; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.sonar.db.DbClient; +import org.sonar.db.DbSession; +import org.sonar.db.user.UserDto; +import org.sonar.db.user.UserQuery; +import org.sonar.telemetry.Dimension; +import org.sonar.telemetry.Granularity; +import org.sonar.telemetry.TelemetryDataProvider; +import org.sonar.telemetry.TelemetryDataType; + +public class TelemetryUserEnabledProvider implements TelemetryDataProvider { + + private final DbClient dbClient; + + public TelemetryUserEnabledProvider(DbClient dbClient) { + this.dbClient = dbClient; + } + + @Override + public String getMetricKey() { + return "user_enabled"; + } + + @Override + public Dimension getDimension() { + return Dimension.USER; + } + + @Override + public Granularity getGranularity() { + return Granularity.DAILY; + } + + @Override + public TelemetryDataType getType() { + return TelemetryDataType.BOOLEAN; + } + + @Override + public Map getUuidValues() { + Map result = new HashMap<>(); + int pageSize = 1000; + int page = 1; + try (DbSession dbSession = dbClient.openSession(false)) { + List userDtos = null; + do { + userDtos = dbClient.userDao().selectUsers(dbSession, UserQuery.builder().build(), page, pageSize); + for (UserDto userDto : userDtos) { + result.put(userDto.getUuid(), userDto.isActive()); + } + page++; + } while (!userDtos.isEmpty()); + } + return result; + } +} diff --git a/server/sonar-telemetry/src/main/java/org/sonar/telemetry/user/package-info.java b/server/sonar-telemetry/src/main/java/org/sonar/telemetry/user/package-info.java new file mode 100644 index 00000000000..a8fd2a249b9 --- /dev/null +++ b/server/sonar-telemetry/src/main/java/org/sonar/telemetry/user/package-info.java @@ -0,0 +1,23 @@ +/* + * SonarQube + * Copyright (C) 2009-2024 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +@ParametersAreNonnullByDefault +package org.sonar.telemetry.user; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/server/sonar-telemetry/src/test/java/org/sonar/telemetry/user/TelemetryUserEnabledProviderTest.java b/server/sonar-telemetry/src/test/java/org/sonar/telemetry/user/TelemetryUserEnabledProviderTest.java new file mode 100644 index 00000000000..032065828ec --- /dev/null +++ b/server/sonar-telemetry/src/test/java/org/sonar/telemetry/user/TelemetryUserEnabledProviderTest.java @@ -0,0 +1,44 @@ +/* + * SonarQube + * Copyright (C) 2009-2024 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.telemetry.user; + +import org.junit.jupiter.api.Test; +import org.sonar.db.DbClient; +import org.sonar.telemetry.Dimension; +import org.sonar.telemetry.Granularity; +import org.sonar.telemetry.TelemetryDataType; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +class TelemetryUserEnabledProviderTest { + + private final DbClient dbClient = mock(DbClient.class); + + private final TelemetryUserEnabledProvider underTest = new TelemetryUserEnabledProvider(dbClient); + + @Test + void testGetters() { + assertThat(underTest.getDimension()).isEqualTo(Dimension.USER); + assertThat(underTest.getGranularity()).isEqualTo(Granularity.DAILY); + assertThat(underTest.getMetricKey()).isEqualTo("user_enabled"); + assertThat(underTest.getType()).isEqualTo(TelemetryDataType.BOOLEAN); + } +} diff --git a/server/sonar-webserver-auth/src/it/java/org/sonar/server/telemetry/TelemetryUserEnabledProviderIT.java b/server/sonar-webserver-auth/src/it/java/org/sonar/server/telemetry/TelemetryUserEnabledProviderIT.java deleted file mode 100644 index 801835ef851..00000000000 --- a/server/sonar-webserver-auth/src/it/java/org/sonar/server/telemetry/TelemetryUserEnabledProviderIT.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.server.telemetry; - -import java.util.Map; -import org.junit.Rule; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.sonar.api.impl.utils.AlwaysIncreasingSystem2; -import org.sonar.api.utils.System2; -import org.sonar.db.DbTester; - -import static org.assertj.core.api.Assertions.assertThat; - -class TelemetryUserEnabledProviderIT { - - private final System2 system2 = new AlwaysIncreasingSystem2(); - - @Rule - public final DbTester db = DbTester.create(system2); - - - private final TelemetryUserEnabledProvider underTest = new TelemetryUserEnabledProvider(db.getDbClient()); - - @BeforeEach - public void beforeEach() { - db.executeUpdateSql("delete from users"); - } - - @Test - void getUuidValues_whenNoUsersInDatabase_shouldReturnEmptyMap() { - Map uuidValues = underTest.getUuidValues(); - - assertThat(uuidValues).isEmpty(); - } - - @Test - void getUuidValues_whenSomeUsersActive_shouldReturnBothBooleanValues() { - db.users().insertUser(user -> user.setUuid("uuid1").setActive(true)); - db.users().insertUser(user -> user.setUuid("uuid1").setActive(false)); - db.getSession().commit(); - - Map uuidValues = underTest.getUuidValues(); - - assertThat(uuidValues).hasSize(2); - assertThat(uuidValues.values().stream().filter(Boolean::booleanValue)).hasSize(1); - assertThat(uuidValues.values().stream().filter(b -> !b)).hasSize(1); - } - - @Test - void getUuidValues_when10ActiveUsers_shouldReturn10BooleanValues() { - for (int i = 0; i < 10; i++) { - db.users().insertUser(user -> user.setActive(true)); - } - db.getSession().commit(); - - Map uuidValues = underTest.getUuidValues(); - - assertThat(uuidValues).hasSize(10); - assertThat(uuidValues.values().stream().filter(Boolean::booleanValue)).hasSize(10); - } -} diff --git a/server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/AuthenticationModule.java b/server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/AuthenticationModule.java index 23a470c9872..9e83675ebd4 100644 --- a/server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/AuthenticationModule.java +++ b/server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/AuthenticationModule.java @@ -23,7 +23,6 @@ import org.sonar.core.platform.Module; import org.sonar.server.authentication.event.AuthenticationEventImpl; import org.sonar.server.authentication.purge.ExpiredSessionsCleaner; import org.sonar.server.authentication.purge.ExpiredSessionsCleanerExecutorServiceImpl; -import org.sonar.server.telemetry.TelemetryUserEnabledProvider; public class AuthenticationModule extends Module { @Override @@ -55,7 +54,6 @@ public class AuthenticationModule extends Module { ExpiredSessionsCleanerExecutorServiceImpl.class, UserLastConnectionDatesUpdaterImpl.class, UserRegistrarImpl.class, - UserSessionInitializer.class, - TelemetryUserEnabledProvider.class); + UserSessionInitializer.class); } } diff --git a/server/sonar-webserver-auth/src/main/java/org/sonar/server/telemetry/TelemetryUserEnabledProvider.java b/server/sonar-webserver-auth/src/main/java/org/sonar/server/telemetry/TelemetryUserEnabledProvider.java deleted file mode 100644 index adcf530d0ed..00000000000 --- a/server/sonar-webserver-auth/src/main/java/org/sonar/server/telemetry/TelemetryUserEnabledProvider.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.server.telemetry; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.sonar.db.DbClient; -import org.sonar.db.DbSession; -import org.sonar.db.user.UserDto; -import org.sonar.db.user.UserQuery; - -public class TelemetryUserEnabledProvider implements TelemetryDataProvider { - - private final DbClient dbClient; - - public TelemetryUserEnabledProvider(DbClient dbClient) { - this.dbClient = dbClient; - } - - @Override - public String getMetricKey() { - return "user_enabled"; - } - - @Override - public Dimension getDimension() { - return Dimension.USER; - } - - @Override - public Granularity getGranularity() { - return Granularity.DAILY; - } - - @Override - public TelemetryDataType getType() { - return TelemetryDataType.BOOLEAN; - } - - @Override - public Map getUuidValues() { - Map result = new HashMap<>(); - int pageSize = 1000; - int page = 1; - try (DbSession dbSession = dbClient.openSession(false)) { - List userDtos = null; - do { - userDtos = dbClient.userDao().selectUsers(dbSession, UserQuery.builder().build(), page, pageSize); - for (UserDto userDto : userDtos) { - result.put(userDto.getUuid(), userDto.isActive()); - } - page++; - } while (!userDtos.isEmpty()); - } - return result; - } -} diff --git a/server/sonar-webserver-auth/src/main/java/org/sonar/server/telemetry/package-info.java b/server/sonar-webserver-auth/src/main/java/org/sonar/server/telemetry/package-info.java deleted file mode 100644 index a1adc893867..00000000000 --- a/server/sonar-webserver-auth/src/main/java/org/sonar/server/telemetry/package-info.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -@ParametersAreNonnullByDefault -package org.sonar.server.telemetry; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/server/sonar-webserver-auth/src/test/java/org/sonar/server/telemetry/TelemetryUserEnabledProviderTest.java b/server/sonar-webserver-auth/src/test/java/org/sonar/server/telemetry/TelemetryUserEnabledProviderTest.java deleted file mode 100644 index 57c0a2de161..00000000000 --- a/server/sonar-webserver-auth/src/test/java/org/sonar/server/telemetry/TelemetryUserEnabledProviderTest.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.server.telemetry; - -import org.junit.jupiter.api.Test; -import org.sonar.db.DbClient; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; - -class TelemetryUserEnabledProviderTest { - - private final DbClient dbClient = mock(DbClient.class); - - private final TelemetryUserEnabledProvider underTest = new TelemetryUserEnabledProvider(dbClient); - - @Test - void testGetters() { - assertThat(underTest.getDimension()).isEqualTo(Dimension.USER); - assertThat(underTest.getGranularity()).isEqualTo(Granularity.DAILY); - assertThat(underTest.getMetricKey()).isEqualTo("user_enabled"); - assertThat(underTest.getType()).isEqualTo(TelemetryDataType.BOOLEAN); - } -} diff --git a/server/sonar-webserver-core/build.gradle b/server/sonar-webserver-core/build.gradle index de12a259f89..ecdf1cac652 100644 --- a/server/sonar-webserver-core/build.gradle +++ b/server/sonar-webserver-core/build.gradle @@ -49,7 +49,6 @@ dependencies { api project(':sonar-markdown') api project(':sonar-plugin-api-impl') api project(':sonar-ws') - api project(':server:sonar-telemetry') implementation project(path: ':server:sonar-webserver-webapi') compileOnlyApi 'com.github.spotbugs:spotbugs-annotations' diff --git a/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java index 00b667efed2..631e9f88854 100644 --- a/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java @@ -210,7 +210,6 @@ import org.sonar.server.plugins.ws.PluginsWs; import org.sonar.server.plugins.ws.UninstallAction; import org.sonar.server.plugins.ws.UpdatesAction; import org.sonar.server.project.DefaultBranchNameResolver; -import org.sonar.server.project.ProjectCppAutoconfigTelemetryProvider; import org.sonar.server.project.ProjectQGChangeEventListener; import org.sonar.server.project.VisibilityService; import org.sonar.server.project.ws.ProjectsWsModule; @@ -290,6 +289,8 @@ import org.sonar.telemetry.legacy.TelemetryClient; import org.sonar.telemetry.legacy.TelemetryDaemon; import org.sonar.telemetry.legacy.TelemetryDataJsonWriter; import org.sonar.telemetry.legacy.TelemetryDataLoaderImpl; +import org.sonar.telemetry.project.ProjectCppAutoconfigTelemetryProvider; +import org.sonar.telemetry.user.TelemetryUserEnabledProvider; import static org.sonar.core.extension.CoreExtensionsInstaller.noAdditionalSideFilter; import static org.sonar.core.extension.PlatformLevelPredicates.hasPlatformLevel4OrNone; @@ -671,7 +672,7 @@ public class PlatformLevel4 extends PlatformLevel { TelemetryVersionProvider.class, TelemetryNclocProvider.class, ProjectCppAutoconfigTelemetryProvider.class, - + TelemetryUserEnabledProvider.class, // monitoring ServerMonitoringMetrics.class,