test_class.declarator: mailService
test_class.modifier: private
test_class.original_string: private MockMailService mailService;
test_class.type: MockMailService
test_class.var_name: mailService
test_class.declarator: httpClient
test_class.modifier: private
test_class.original_string: private HttpClient httpClient;
test_class.type: HttpClient
test_class.var_name: httpClient
test_class.declarator: adminJsonService
test_class.modifier: private
test_class.original_string: private AdminJsonService adminJsonService;
test_class.type: AdminJsonService
test_class.var_name: adminJsonService
test_class.file: ui/src/test/java/org/glowroot/ui/AdminJsonServiceTest.java
test_class.identifier: AdminJsonServiceTest
test_case.body: @Test
      public void testWithDefaultFrom() throws Exception {
          // given
          SmtpConfigDto configDto = ImmutableSmtpConfigDto.builder()
                  .host("localhost")
                  .username("")
                  .passwordExists(false)
                  .fromEmailAddress("")
                  .fromDisplayName("From Example")
                  .version("1234")
                  .testEmailRecipient("to@example.org")
                  .build();
          // when
          adminJsonService.sendTestEmail(configDto);
          // then
          Message message = mailService.getMessage();
          String localHostname = InetAddress.getLocalHost().getHostName();
          assertThat(message.getFrom()[0].toString())
                  .isEqualTo("From Example <glowroot@" + localHostname + ">");
          assertThat(message.getRecipients(Message.RecipientType.TO)[0].toString())
                  .isEqualTo("to@example.org");
          assertThat(message.getSubject()).isEqualTo("[Glowroot] Test email");
          assertThat(message.getContent()).isEqualTo("");
      }
test_case.class_method_signature: AdminJsonServiceTest.testWithDefaultFrom()
test_case.full_signature: @Test public void testWithDefaultFrom()
test_case.identifier: testWithDefaultFrom
test_case.invocations: build testEmailRecipient version fromDisplayName fromEmailAddress passwordExists username host builder sendTestEmail getMessage getHostName getLocalHost isEqualTo assertThat toString getFrom isEqualTo assertThat toString getRecipients isEqualTo assertThat getSubject isEqualTo assertThat getContent
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testWithDefaultFrom()
focal_class.declarator: logger = LoggerFactory.getLogger(ConfigJsonService.class)
focal_class.modifier: private static final
focal_class.original_string: private static final Logger logger = LoggerFactory.getLogger(ConfigJsonService.class);
focal_class.type: Logger
focal_class.var_name: logger
focal_class.declarator: mapper = ObjectMappers.create()
focal_class.modifier: private static final
focal_class.original_string: private static final ObjectMapper mapper = ObjectMappers.create();
focal_class.type: ObjectMapper
focal_class.var_name: mapper
focal_class.declarator: orderingByBytesDesc = new Ordering<H2Table>() {
          @Override
          public int compare(H2Table left, H2Table right) {
              return Longs.compare(right.bytes(), left.bytes());
          }
      }
focal_class.modifier: private static final
focal_class.original_string: private static final Ordering<H2Table> orderingByBytesDesc = new Ordering<H2Table>() {
          @Override
          public int compare(H2Table left, H2Table right) {
              return Longs.compare(right.bytes(), left.bytes());
          }
      };
focal_class.type: Ordering<H2Table>
focal_class.var_name: orderingByBytesDesc
focal_class.declarator: central
focal_class.modifier: private final
focal_class.original_string: private final boolean central;
focal_class.type: boolean
focal_class.var_name: central
focal_class.declarator: offlineViewer
focal_class.modifier: private final
focal_class.original_string: private final boolean offlineViewer;
focal_class.type: boolean
focal_class.var_name: offlineViewer
focal_class.declarator: webPortReadOnly
focal_class.modifier: private final
focal_class.original_string: private final boolean webPortReadOnly;
focal_class.type: boolean
focal_class.var_name: webPortReadOnly
focal_class.declarator: confDirs
focal_class.modifier: private final
focal_class.original_string: private final List<File> confDirs;
focal_class.type: List<File>
focal_class.var_name: confDirs
focal_class.declarator: configRepository
focal_class.modifier: private final
focal_class.original_string: private final ConfigRepository configRepository;
focal_class.type: ConfigRepository
focal_class.var_name: configRepository
focal_class.declarator: repoAdmin
focal_class.modifier: private final
focal_class.original_string: private final RepoAdmin repoAdmin;
focal_class.type: RepoAdmin
focal_class.var_name: repoAdmin
focal_class.declarator: liveAggregateRepository
focal_class.modifier: private final
focal_class.original_string: private final LiveAggregateRepository liveAggregateRepository;
focal_class.type: LiveAggregateRepository
focal_class.var_name: liveAggregateRepository
focal_class.declarator: mailService
focal_class.modifier: private final
focal_class.original_string: private final MailService mailService;
focal_class.type: MailService
focal_class.var_name: mailService
focal_class.declarator: httpClient
focal_class.modifier: private final
focal_class.original_string: private final HttpClient httpClient;
focal_class.type: HttpClient
focal_class.var_name: httpClient
focal_class.declarator: httpServer
focal_class.modifier: private volatile @MonotonicNonNull
focal_class.original_string: private volatile @MonotonicNonNull HttpServer httpServer;
focal_class.type: HttpServer
focal_class.var_name: httpServer
focal_class.file: ui/src/main/java/org/glowroot/ui/AdminJsonService.java
focal_class.identifier: AdminJsonService
focal_class.class_method_signature: AdminJsonService.AdminJsonService(boolean central, boolean offlineViewer, boolean webPortReadOnly,
              List<File> confDirs, ConfigRepository configRepository,
              RepoAdmin repoAdmin, LiveAggregateRepository liveAggregateRepository,
              MailService mailService, HttpClient httpClient)
focal_class.full_signature:   AdminJsonService(boolean central, boolean offlineViewer, boolean webPortReadOnly,
              List<File> confDirs, ConfigRepository configRepository,
              RepoAdmin repoAdmin, LiveAggregateRepository liveAggregateRepository,
              MailService mailService, HttpClient httpClient)
focal_class.identifier: AdminJsonService
focal_class.parameters: (boolean central, boolean offlineViewer, boolean webPortReadOnly,
              List<File> confDirs, ConfigRepository configRepository,
              RepoAdmin repoAdmin, LiveAggregateRepository liveAggregateRepository,
              MailService mailService, HttpClient httpClient)
focal_class.signature:  AdminJsonService(boolean central, boolean offlineViewer, boolean webPortReadOnly,
              List<File> confDirs, ConfigRepository configRepository,
              RepoAdmin repoAdmin, LiveAggregateRepository liveAggregateRepository,
              MailService mailService, HttpClient httpClient)
focal_class.class_method_signature: AdminJsonService.setHttpServer(HttpServer httpServer)
focal_class.full_signature:  void setHttpServer(HttpServer httpServer)
focal_class.identifier: setHttpServer
focal_class.parameters: (HttpServer httpServer)
focal_class.return: void
focal_class.signature: void setHttpServer(HttpServer httpServer)
focal_class.class_method_signature: AdminJsonService.changePassword(@BindRequest ChangePassword changePassword,
              @BindAuthentication Authentication authentication)
focal_class.full_signature: @POST(path = "/backend/change-password", permission = "") String changePassword(@BindRequest ChangePassword changePassword,
              @BindAuthentication Authentication authentication)
focal_class.identifier: changePassword
focal_class.modifiers: @POST(path = "/backend/change-password", permission = "")
focal_class.parameters: (@BindRequest ChangePassword changePassword,
              @BindAuthentication Authentication authentication)
focal_class.return: String
focal_class.signature: String changePassword(@BindRequest ChangePassword changePassword,
              @BindAuthentication Authentication authentication)
focal_class.class_method_signature: AdminJsonService.getGeneralConfig()
focal_class.full_signature: @GET(path = "/backend/admin/general", permission = "admin:view:general") String getGeneralConfig()
focal_class.identifier: getGeneralConfig
focal_class.modifiers: @GET(path = "/backend/admin/general", permission = "admin:view:general")
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getGeneralConfig()
focal_class.class_method_signature: AdminJsonService.getWebConfig()
focal_class.full_signature: @GET(path = "/backend/admin/web", permission = "admin:view:web") String getWebConfig()
focal_class.identifier: getWebConfig
focal_class.modifiers: @GET(path = "/backend/admin/web", permission = "admin:view:web")
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getWebConfig()
focal_class.class_method_signature: AdminJsonService.getStorageConfig()
focal_class.full_signature: @GET(path = "/backend/admin/storage", permission = "admin:view:storage") String getStorageConfig()
focal_class.identifier: getStorageConfig
focal_class.modifiers: @GET(path = "/backend/admin/storage", permission = "admin:view:storage")
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getStorageConfig()
focal_class.class_method_signature: AdminJsonService.getSmtpConfig()
focal_class.full_signature: @GET(path = "/backend/admin/smtp", permission = "admin:view:smtp") String getSmtpConfig()
focal_class.identifier: getSmtpConfig
focal_class.modifiers: @GET(path = "/backend/admin/smtp", permission = "admin:view:smtp")
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getSmtpConfig()
focal_class.class_method_signature: AdminJsonService.getHttpProxyConfig()
focal_class.full_signature: @GET(path = "/backend/admin/http-proxy", permission = "admin:view:httpProxy") String getHttpProxyConfig()
focal_class.identifier: getHttpProxyConfig
focal_class.modifiers: @GET(path = "/backend/admin/http-proxy", permission = "admin:view:httpProxy")
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getHttpProxyConfig()
focal_class.class_method_signature: AdminJsonService.getLdapConfig()
focal_class.full_signature: @GET(path = "/backend/admin/ldap", permission = "admin:view:ldap") String getLdapConfig()
focal_class.identifier: getLdapConfig
focal_class.modifiers: @GET(path = "/backend/admin/ldap", permission = "admin:view:ldap")
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getLdapConfig()
focal_class.class_method_signature: AdminJsonService.getPagerDutyConfig()
focal_class.full_signature: @GET(path = "/backend/admin/pager-duty", permission = "admin:view:pagerDuty") String getPagerDutyConfig()
focal_class.identifier: getPagerDutyConfig
focal_class.modifiers: @GET(path = "/backend/admin/pager-duty", permission = "admin:view:pagerDuty")
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getPagerDutyConfig()
focal_class.class_method_signature: AdminJsonService.getSlackConfig()
focal_class.full_signature: @GET(path = "/backend/admin/slack", permission = "admin:view:slack") String getSlackConfig()
focal_class.identifier: getSlackConfig
focal_class.modifiers: @GET(path = "/backend/admin/slack", permission = "admin:view:slack")
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getSlackConfig()
focal_class.class_method_signature: AdminJsonService.getHealthchecksIoConfig()
focal_class.full_signature: @GET(path = "/backend/admin/healthchecks-io", permission = "admin:view:healthchecksIo") String getHealthchecksIoConfig()
focal_class.identifier: getHealthchecksIoConfig
focal_class.modifiers: @GET(path = "/backend/admin/healthchecks-io", permission = "admin:view:healthchecksIo")
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getHealthchecksIoConfig()
focal_class.class_method_signature: AdminJsonService.getAllAdmin()
focal_class.full_signature: @GET(path = "/backend/admin/json", permission = "admin:view") String getAllAdmin()
focal_class.identifier: getAllAdmin
focal_class.modifiers: @GET(path = "/backend/admin/json", permission = "admin:view")
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getAllAdmin()
focal_class.class_method_signature: AdminJsonService.updateGeneralConfig(@BindRequest String content)
focal_class.full_signature: @POST(path = "/backend/admin/general", permission = "admin:edit:general") String updateGeneralConfig(@BindRequest String content)
focal_class.identifier: updateGeneralConfig
focal_class.modifiers: @POST(path = "/backend/admin/general", permission = "admin:edit:general")
focal_class.parameters: (@BindRequest String content)
focal_class.return: String
focal_class.signature: String updateGeneralConfig(@BindRequest String content)
focal_class.class_method_signature: AdminJsonService.updateWebConfig(@BindRequest String content)
focal_class.full_signature: @POST(path = "/backend/admin/web", permission = "admin:edit:web") Object updateWebConfig(@BindRequest String content)
focal_class.identifier: updateWebConfig
focal_class.modifiers: @POST(path = "/backend/admin/web", permission = "admin:edit:web")
focal_class.parameters: (@BindRequest String content)
focal_class.return: Object
focal_class.signature: Object updateWebConfig(@BindRequest String content)
focal_class.class_method_signature: AdminJsonService.updateStorageConfig(@BindRequest String content)
focal_class.full_signature: @POST(path = "/backend/admin/storage", permission = "admin:edit:storage") String updateStorageConfig(@BindRequest String content)
focal_class.identifier: updateStorageConfig
focal_class.modifiers: @POST(path = "/backend/admin/storage", permission = "admin:edit:storage")
focal_class.parameters: (@BindRequest String content)
focal_class.return: String
focal_class.signature: String updateStorageConfig(@BindRequest String content)
focal_class.class_method_signature: AdminJsonService.updateSmtpConfig(@BindRequest SmtpConfigDto configDto)
focal_class.full_signature: @POST(path = "/backend/admin/smtp", permission = "admin:edit:smtp") String updateSmtpConfig(@BindRequest SmtpConfigDto configDto)
focal_class.identifier: updateSmtpConfig
focal_class.modifiers: @POST(path = "/backend/admin/smtp", permission = "admin:edit:smtp")
focal_class.parameters: (@BindRequest SmtpConfigDto configDto)
focal_class.return: String
focal_class.signature: String updateSmtpConfig(@BindRequest SmtpConfigDto configDto)
focal_class.class_method_signature: AdminJsonService.updateHttpProxyConfig(@BindRequest HttpProxyConfigDto configDto)
focal_class.full_signature: @POST(path = "/backend/admin/http-proxy", permission = "admin:edit:httpProxy") String updateHttpProxyConfig(@BindRequest HttpProxyConfigDto configDto)
focal_class.identifier: updateHttpProxyConfig
focal_class.modifiers: @POST(path = "/backend/admin/http-proxy", permission = "admin:edit:httpProxy")
focal_class.parameters: (@BindRequest HttpProxyConfigDto configDto)
focal_class.return: String
focal_class.signature: String updateHttpProxyConfig(@BindRequest HttpProxyConfigDto configDto)
focal_class.class_method_signature: AdminJsonService.updateLdapConfig(@BindRequest LdapConfigDto configDto)
focal_class.full_signature: @POST(path = "/backend/admin/ldap", permission = "admin:edit:ldap") String updateLdapConfig(@BindRequest LdapConfigDto configDto)
focal_class.identifier: updateLdapConfig
focal_class.modifiers: @POST(path = "/backend/admin/ldap", permission = "admin:edit:ldap")
focal_class.parameters: (@BindRequest LdapConfigDto configDto)
focal_class.return: String
focal_class.signature: String updateLdapConfig(@BindRequest LdapConfigDto configDto)
focal_class.class_method_signature: AdminJsonService.updatePagerDutyConfig(@BindRequest PagerDutyConfigDto configDto)
focal_class.full_signature: @POST(path = "/backend/admin/pager-duty", permission = "admin:edit:pagerDuty") String updatePagerDutyConfig(@BindRequest PagerDutyConfigDto configDto)
focal_class.identifier: updatePagerDutyConfig
focal_class.modifiers: @POST(path = "/backend/admin/pager-duty", permission = "admin:edit:pagerDuty")
focal_class.parameters: (@BindRequest PagerDutyConfigDto configDto)
focal_class.return: String
focal_class.signature: String updatePagerDutyConfig(@BindRequest PagerDutyConfigDto configDto)
focal_class.class_method_signature: AdminJsonService.updateSlackConfig(@BindRequest SlackConfigDto configDto)
focal_class.full_signature: @POST(path = "/backend/admin/slack", permission = "admin:edit:slack") String updateSlackConfig(@BindRequest SlackConfigDto configDto)
focal_class.identifier: updateSlackConfig
focal_class.modifiers: @POST(path = "/backend/admin/slack", permission = "admin:edit:slack")
focal_class.parameters: (@BindRequest SlackConfigDto configDto)
focal_class.return: String
focal_class.signature: String updateSlackConfig(@BindRequest SlackConfigDto configDto)
focal_class.class_method_signature: AdminJsonService.updateHealthchecksIoConfig(@BindRequest HealthchecksIoConfigDto configDto)
focal_class.full_signature: @POST(path = "/backend/admin/healthchecks-io", permission = "admin:edit:healthchecksIo") String updateHealthchecksIoConfig(@BindRequest HealthchecksIoConfigDto configDto)
focal_class.identifier: updateHealthchecksIoConfig
focal_class.modifiers: @POST(path = "/backend/admin/healthchecks-io", permission = "admin:edit:healthchecksIo")
focal_class.parameters: (@BindRequest HealthchecksIoConfigDto configDto)
focal_class.return: String
focal_class.signature: String updateHealthchecksIoConfig(@BindRequest HealthchecksIoConfigDto configDto)
focal_class.class_method_signature: AdminJsonService.updateAllAdmin(@BindRequest String content)
focal_class.full_signature: @POST(path = "/backend/admin/json", permission = "admin:edit") String updateAllAdmin(@BindRequest String content)
focal_class.identifier: updateAllAdmin
focal_class.modifiers: @POST(path = "/backend/admin/json", permission = "admin:edit")
focal_class.parameters: (@BindRequest String content)
focal_class.return: String
focal_class.signature: String updateAllAdmin(@BindRequest String content)
focal_class.class_method_signature: AdminJsonService.sendTestEmail(@BindRequest SmtpConfigDto configDto)
focal_class.full_signature: @POST(path = "/backend/admin/send-test-email", permission = "admin:edit:smtp") String sendTestEmail(@BindRequest SmtpConfigDto configDto)
focal_class.identifier: sendTestEmail
focal_class.modifiers: @POST(path = "/backend/admin/send-test-email", permission = "admin:edit:smtp")
focal_class.parameters: (@BindRequest SmtpConfigDto configDto)
focal_class.return: String
focal_class.signature: String sendTestEmail(@BindRequest SmtpConfigDto configDto)
focal_class.class_method_signature: AdminJsonService.testHttpProxy(@BindRequest HttpProxyConfigDto configDto)
focal_class.full_signature: @POST(path = "/backend/admin/test-http-proxy", permission = "admin:edit:httpProxy") String testHttpProxy(@BindRequest HttpProxyConfigDto configDto)
focal_class.identifier: testHttpProxy
focal_class.modifiers: @POST(path = "/backend/admin/test-http-proxy", permission = "admin:edit:httpProxy")
focal_class.parameters: (@BindRequest HttpProxyConfigDto configDto)
focal_class.return: String
focal_class.signature: String testHttpProxy(@BindRequest HttpProxyConfigDto configDto)
focal_class.class_method_signature: AdminJsonService.testLdap(@BindRequest LdapConfigDto configDto)
focal_class.full_signature: @POST(path = "/backend/admin/test-ldap", permission = "admin:edit:ldap") String testLdap(@BindRequest LdapConfigDto configDto)
focal_class.identifier: testLdap
focal_class.modifiers: @POST(path = "/backend/admin/test-ldap", permission = "admin:edit:ldap")
focal_class.parameters: (@BindRequest LdapConfigDto configDto)
focal_class.return: String
focal_class.signature: String testLdap(@BindRequest LdapConfigDto configDto)
focal_class.class_method_signature: AdminJsonService.defragH2Data(@BindAuthentication Authentication authentication)
focal_class.full_signature: @POST(path = "/backend/admin/defrag-h2-data", permission = "") void defragH2Data(@BindAuthentication Authentication authentication)
focal_class.identifier: defragH2Data
focal_class.modifiers: @POST(path = "/backend/admin/defrag-h2-data", permission = "")
focal_class.parameters: (@BindAuthentication Authentication authentication)
focal_class.return: void
focal_class.signature: void defragH2Data(@BindAuthentication Authentication authentication)
focal_class.class_method_signature: AdminJsonService.compactH2Data(@BindAuthentication Authentication authentication)
focal_class.full_signature: @POST(path = "/backend/admin/compact-h2-data", permission = "") void compactH2Data(@BindAuthentication Authentication authentication)
focal_class.identifier: compactH2Data
focal_class.modifiers: @POST(path = "/backend/admin/compact-h2-data", permission = "")
focal_class.parameters: (@BindAuthentication Authentication authentication)
focal_class.return: void
focal_class.signature: void compactH2Data(@BindAuthentication Authentication authentication)
focal_class.class_method_signature: AdminJsonService.analyzeH2DiskSpace(@BindAuthentication Authentication authentication)
focal_class.full_signature: @POST(path = "/backend/admin/analyze-h2-disk-space", permission = "") String analyzeH2DiskSpace(@BindAuthentication Authentication authentication)
focal_class.identifier: analyzeH2DiskSpace
focal_class.modifiers: @POST(path = "/backend/admin/analyze-h2-disk-space", permission = "")
focal_class.parameters: (@BindAuthentication Authentication authentication)
focal_class.return: String
focal_class.signature: String analyzeH2DiskSpace(@BindAuthentication Authentication authentication)
focal_class.class_method_signature: AdminJsonService.analyzeTraceCounts(@BindAuthentication Authentication authentication)
focal_class.full_signature: @POST(path = "/backend/admin/analyze-trace-counts", permission = "") String analyzeTraceCounts(@BindAuthentication Authentication authentication)
focal_class.identifier: analyzeTraceCounts
focal_class.modifiers: @POST(path = "/backend/admin/analyze-trace-counts", permission = "")
focal_class.parameters: (@BindAuthentication Authentication authentication)
focal_class.return: String
focal_class.signature: String analyzeTraceCounts(@BindAuthentication Authentication authentication)
focal_class.class_method_signature: AdminJsonService.deleteAllData()
focal_class.full_signature: @POST(path = "/backend/admin/delete-all-stored-data", permission = "admin:edit:storage") void deleteAllData()
focal_class.identifier: deleteAllData
focal_class.modifiers: @POST(path = "/backend/admin/delete-all-stored-data", permission = "admin:edit:storage")
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void deleteAllData()
focal_class.class_method_signature: AdminJsonService.updateCassandraTwcsWindowSizes()
focal_class.full_signature: @POST(path = "/backend/admin/update-cassandra-twcs-window-sizes", permission = "admin:edit:storage") String updateCassandraTwcsWindowSizes()
focal_class.identifier: updateCassandraTwcsWindowSizes
focal_class.modifiers: @POST(path = "/backend/admin/update-cassandra-twcs-window-sizes", permission = "admin:edit:storage")
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String updateCassandraTwcsWindowSizes()
focal_class.class_method_signature: AdminJsonService.getCassandraWriteTotals(@BindRequest CassandraWriteTotalsRequest request)
focal_class.full_signature: @GET(path = "/backend/admin/cassandra-write-totals", permission = "admin:view:storage") String getCassandraWriteTotals(@BindRequest CassandraWriteTotalsRequest request)
focal_class.identifier: getCassandraWriteTotals
focal_class.modifiers: @GET(path = "/backend/admin/cassandra-write-totals", permission = "admin:view:storage")
focal_class.parameters: (@BindRequest CassandraWriteTotalsRequest request)
focal_class.return: String
focal_class.signature: String getCassandraWriteTotals(@BindRequest CassandraWriteTotalsRequest request)
focal_class.class_method_signature: AdminJsonService.getConfFile(String fileName)
focal_class.full_signature: private @Nullable File getConfFile(String fileName)
focal_class.identifier: getConfFile
focal_class.modifiers: private @Nullable
focal_class.parameters: (String fileName)
focal_class.return: File
focal_class.signature: File getConfFile(String fileName)
focal_class.class_method_signature: AdminJsonService.onSuccessfulEmbeddedWebUpdate(EmbeddedWebConfig config)
focal_class.full_signature: @RequiresNonNull("httpServer") private CommonResponse onSuccessfulEmbeddedWebUpdate(EmbeddedWebConfig config)
focal_class.identifier: onSuccessfulEmbeddedWebUpdate
focal_class.modifiers: @RequiresNonNull("httpServer") private
focal_class.parameters: (EmbeddedWebConfig config)
focal_class.return: CommonResponse
focal_class.signature: CommonResponse onSuccessfulEmbeddedWebUpdate(EmbeddedWebConfig config)
focal_class.class_method_signature: AdminJsonService.getEmbeddedAdminGeneralConfig()
focal_class.full_signature: private String getEmbeddedAdminGeneralConfig()
focal_class.identifier: getEmbeddedAdminGeneralConfig
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getEmbeddedAdminGeneralConfig()
focal_class.class_method_signature: AdminJsonService.getCentralAdminGeneralConfig()
focal_class.full_signature: private String getCentralAdminGeneralConfig()
focal_class.identifier: getCentralAdminGeneralConfig
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getCentralAdminGeneralConfig()
focal_class.class_method_signature: AdminJsonService.getEmbeddedWebConfig(boolean portChangeFailed)
focal_class.full_signature: private String getEmbeddedWebConfig(boolean portChangeFailed)
focal_class.identifier: getEmbeddedWebConfig
focal_class.modifiers: private
focal_class.parameters: (boolean portChangeFailed)
focal_class.return: String
focal_class.signature: String getEmbeddedWebConfig(boolean portChangeFailed)
focal_class.class_method_signature: AdminJsonService.getCentralWebConfig()
focal_class.full_signature: private String getCentralWebConfig()
focal_class.identifier: getCentralWebConfig
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getCentralWebConfig()
focal_class.class_method_signature: AdminJsonService.createErrorResponse(Exception exception)
focal_class.full_signature: private static String createErrorResponse(Exception exception)
focal_class.identifier: createErrorResponse
focal_class.modifiers: private static
focal_class.parameters: (Exception exception)
focal_class.return: String
focal_class.signature: String createErrorResponse(Exception exception)
focal_class.class_method_signature: AdminJsonService.createErrorResponse(@Nullable String message)
focal_class.full_signature: private static String createErrorResponse(@Nullable String message)
focal_class.identifier: createErrorResponse
focal_class.modifiers: private static
focal_class.parameters: (@Nullable String message)
focal_class.return: String
focal_class.signature: String createErrorResponse(@Nullable String message)
focal_method.body: @POST(path = "/backend/admin/send-test-email", permission = "admin:edit:smtp")
      String sendTestEmail(@BindRequest SmtpConfigDto configDto) throws IOException {
          // capturing newPlainPassword separately so that newPassword doesn't go through
          // encryption/decryption which has possibility of throwing
          // org.glowroot.common.repo.util.LazySecretKey.SymmetricEncryptionKeyMissingException
          SmtpConfigDto configDtoWithoutNewPassword;
          String passwordOverride;
          String newPassword = configDto.newPassword();
          if (newPassword.isEmpty()) {
              configDtoWithoutNewPassword = configDto;
              passwordOverride = null;
          } else {
              configDtoWithoutNewPassword = ImmutableSmtpConfigDto.builder()
                      .copyFrom(configDto)
                      .newPassword("")
                      .build();
              passwordOverride = newPassword;
          }
          String testEmailRecipient = configDtoWithoutNewPassword.testEmailRecipient();
          checkNotNull(testEmailRecipient);
          List<String> emailAddresses =
                  Splitter.on(',').trimResults().splitToList(testEmailRecipient);
          try {
              String centralDisplay;
              String agentDisplay;
              if (central) {
                  centralDisplay =
                          configRepository.getCentralAdminGeneralConfig().centralDisplayName();
                  agentDisplay = "";
              } else {
                  centralDisplay = "";
                  agentDisplay = configRepository.getEmbeddedAdminGeneralConfig()
                          .agentDisplayNameOrDefault();
              }
              String subject = "Test email";
              AlertingService.sendEmail(centralDisplay, agentDisplay, subject, emailAddresses, "",
                      configDtoWithoutNewPassword.convert(configRepository), passwordOverride,
                      configRepository.getLazySecretKey(), mailService);
          } catch (Exception e) {
              logger.debug(e.getMessage(), e);
              return createErrorResponse(e);
          }
          return "{}";
      }
focal_method.class_method_signature: AdminJsonService.sendTestEmail(@BindRequest SmtpConfigDto configDto)
focal_method.full_signature: @POST(path = "/backend/admin/send-test-email", permission = "admin:edit:smtp") String sendTestEmail(@BindRequest SmtpConfigDto configDto)
focal_method.identifier: sendTestEmail
focal_method.invocations: newPassword isEmpty build newPassword copyFrom builder testEmailRecipient checkNotNull splitToList trimResults on centralDisplayName getCentralAdminGeneralConfig agentDisplayNameOrDefault getEmbeddedAdminGeneralConfig sendEmail convert getLazySecretKey debug getMessage createErrorResponse
focal_method.modifiers: @POST(path = "/backend/admin/send-test-email", permission = "admin:edit:smtp")
focal_method.parameters: (@BindRequest SmtpConfigDto configDto)
focal_method.return: String
focal_method.signature: String sendTestEmail(@BindRequest SmtpConfigDto configDto)