import java.io.File;
import java.io.IOException;
+import java.util.Date;
import java.util.Properties;
import org.apache.commons.dbcp.BasicDataSource;
import org.junit.Rule;
import org.picocontainer.MutablePicoContainer;
import org.sonar.api.CoreProperties;
import org.sonar.api.database.DatabaseProperties;
+import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.System2;
import org.sonar.db.DbTester;
import org.sonar.db.property.PropertyDto;
properties.setProperty(DatabaseProperties.PROP_USER, "sonar");
properties.setProperty(DatabaseProperties.PROP_PASSWORD, "sonar");
insertProperty(CoreProperties.SERVER_ID, "a_startup_id");
- insertProperty("sonar.core.startedAt", "123456789");
+ insertProperty(CoreProperties.SERVER_STARTTIME, DateUtils.formatDateTime(new Date()));
underTest
.start(new Props(properties));
*/
package org.sonar.server.platform;
+import java.util.Date;
import org.sonar.api.CoreProperties;
import org.sonar.api.Startable;
import org.sonar.api.server.ServerSide;
+import org.sonar.api.utils.DateUtils;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.property.PropertiesDao;
@Override
public void start() {
try (DbSession dbSession = dbClient.openSession(false)) {
+ String startedAt = DateUtils.formatDateTime(new Date(metadata.getStartedAt()));
PropertiesDao dao = dbClient.propertiesDao();
dao.insertProperty(dbSession, new PropertyDto().setKey(CoreProperties.SERVER_ID).setValue(metadata.getStartupId()));
- dao.insertProperty(dbSession, new PropertyDto().setKey(StartupMetadataProvider.PROPERTY_STARTED_AT).setValue(String.valueOf(metadata.getStartedAt())));
+ dao.insertProperty(dbSession, new PropertyDto().setKey(CoreProperties.SERVER_STARTTIME).setValue(startedAt));
dbSession.commit();
}
}
import org.sonar.api.SonarRuntime;
import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.server.ServerSide;
+import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.System2;
import org.sonar.core.util.UuidFactory;
import org.sonar.db.DbClient;
@ServerSide
public class StartupMetadataProvider extends ProviderAdapter {
- public static final String PROPERTY_STARTED_AT = "sonar.core.startedAt";
-
private StartupMetadata cache = null;
public StartupMetadata provide(UuidFactory uuidFactory, System2 system, SonarRuntime runtime, Cluster cluster, DbClient dbClient) {
private static StartupMetadata load(DbClient dbClient) {
try (DbSession dbSession = dbClient.openSession(false)) {
String startupId = selectProperty(dbClient, dbSession, CoreProperties.SERVER_ID);
- String startedAt = selectProperty(dbClient, dbSession, PROPERTY_STARTED_AT);
- return new StartupMetadata(startupId, Long.parseLong(startedAt));
+ String startedAt = selectProperty(dbClient, dbSession, CoreProperties.SERVER_STARTTIME);
+ return new StartupMetadata(startupId, DateUtils.parseDateTime(startedAt).getTime());
}
}
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.CoreProperties;
+import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.System2;
import org.sonar.db.DbTester;
import org.sonar.db.property.PropertyDto;
underTest.start();
assertPersistedProperty(CoreProperties.SERVER_ID, metadata.getStartupId());
- assertPersistedProperty("sonar.core.startedAt", String.valueOf(metadata.getStartedAt()));
+ assertPersistedProperty(CoreProperties.SERVER_STARTTIME, DateUtils.formatDateTime(metadata.getStartedAt()));
underTest.stop();
}
import org.sonar.api.SonarQubeSide;
import org.sonar.api.SonarRuntime;
import org.sonar.api.internal.SonarRuntimeImpl;
+import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.Version;
import org.sonar.core.util.UuidFactory;
public class StartupMetadataProviderTest {
- private static final long A_DATE = 123_456_789L;
+ private static final long A_DATE = 1_500_000_000_000L;
private static final String AN_ID = "generated_id";
@Rule
assertThat(metadata.getStartupId()).isEqualTo(AN_ID);
assertNotPersistedProperty(CoreProperties.SERVER_ID);
- assertNotPersistedProperty("sonar.core.startedAt");
+ assertNotPersistedProperty(CoreProperties.SERVER_STARTTIME);
// keep a cache
StartupMetadata secondMetadata = underTest.provide(uuidFactory, system, runtime, cluster, dbTester.getDbClient());
// still in database
assertPersistedProperty(CoreProperties.SERVER_ID, AN_ID);
- assertPersistedProperty("sonar.core.startedAt", String.valueOf(A_DATE));
+ assertPersistedProperty(CoreProperties.SERVER_STARTTIME, DateUtils.formatDateTime(A_DATE));
// keep a cache
StartupMetadata secondMetadata = underTest.provide(uuidFactory, system, runtime, cluster, dbTester.getDbClient());
package org.sonar.scanner.platform;
import java.io.File;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
import java.util.Date;
import javax.annotation.CheckForNull;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.LoggerFactory;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.ScannerSide;
import org.sonar.api.config.Settings;
import org.sonar.api.platform.Server;
+import org.sonar.api.utils.DateUtils;
import org.sonar.scanner.bootstrap.BatchWsClient;
import static org.apache.commons.lang.StringUtils.trimToEmpty;
@Override
public Date getStartedAt() {
String dateString = settings.getString(CoreProperties.SERVER_STARTTIME);
- if (dateString != null) {
- try {
- return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(dateString);
-
- } catch (ParseException e) {
- LoggerFactory.getLogger(getClass()).error("The property " + CoreProperties.SERVER_STARTTIME + " is badly formatted.", e);
- }
- }
- return null;
+ return DateUtils.parseDateTime(dateString);
}
@Override
assertThat(metadata.getPublicRootUrl()).isEqualTo("http://foo.com");
}
- @Test
- public void invalidDate() {
+ @Test(expected = RuntimeException.class)
+ public void invalid_startup_date_throws_exception() {
Settings settings = new Settings();
settings.setProperty(CoreProperties.SERVER_STARTTIME, "invalid");
BatchWsClient client = mock(BatchWsClient.class);
DefaultServer metadata = new DefaultServer(settings, client);
- assertThat(metadata.getStartedAt()).isNull();
+ metadata.getStartedAt();
}
}