use of org.skife.jdbi.v2.StatementContext in project metrics by dropwizard.
the class InstrumentedTimingCollectorTest method updatesTimerForShortSqlObjectStrategy.
@Test
public void updatesTimerForShortSqlObjectStrategy() throws Exception {
final StatementNameStrategy strategy = new ShortNameStrategy("jdbi");
final InstrumentedTimingCollector collector = new InstrumentedTimingCollector(registry, strategy);
final StatementContext ctx = mock(StatementContext.class);
doReturn("SELECT 1").when(ctx).getRawSql();
doReturn(getClass()).when(ctx).getSqlObjectType();
doReturn(getClass().getMethod("updatesTimerForShortSqlObjectStrategy")).when(ctx).getSqlObjectMethod();
collector.collect(TimeUnit.SECONDS.toNanos(1), ctx);
final String name = strategy.getStatementName(ctx);
final Timer timer = registry.timer(name);
assertThat(name).isEqualTo(name("jdbi", getClass().getSimpleName(), "updatesTimerForShortSqlObjectStrategy"));
assertThat(timer.getSnapshot().getMax()).isEqualTo(1000000000);
}
use of org.skife.jdbi.v2.StatementContext in project metrics by dropwizard.
the class InstrumentedTimingCollectorTest method updatesTimerForContextClass.
@Test
public void updatesTimerForContextClass() throws Exception {
final StatementNameStrategy strategy = new SmartNameStrategy();
final InstrumentedTimingCollector collector = new InstrumentedTimingCollector(registry, strategy);
final StatementContext ctx = mock(StatementContext.class);
doReturn("SELECT 1").when(ctx).getRawSql();
doReturn(getClass().getName()).when(ctx).getAttribute(NameStrategies.STATEMENT_CLASS);
doReturn("updatesTimerForContextClass").when(ctx).getAttribute(NameStrategies.STATEMENT_NAME);
collector.collect(TimeUnit.SECONDS.toNanos(3), ctx);
final String name = strategy.getStatementName(ctx);
final Timer timer = registry.timer(name);
assertThat(name).isEqualTo(name(getClass(), "updatesTimerForContextClass"));
assertThat(timer.getSnapshot().getMax()).isEqualTo(3000000000L);
}
use of org.skife.jdbi.v2.StatementContext in project druid by druid-io.
the class JDBCExtractionNamespaceCacheFactory method populateCache.
@Override
@Nullable
public CacheScheduler.VersionedCache populateCache(final JDBCExtractionNamespace namespace, final CacheScheduler.EntryImpl<JDBCExtractionNamespace> entryId, final String lastVersion, final CacheScheduler scheduler) {
final long lastCheck = lastVersion == null ? JodaUtils.MIN_INSTANT : Long.parseLong(lastVersion);
final Long lastDBUpdate = lastUpdates(entryId, namespace);
if (lastDBUpdate != null && lastDBUpdate <= lastCheck) {
return null;
}
final long dbQueryStart = System.currentTimeMillis();
final DBI dbi = ensureDBI(entryId, namespace);
final String table = namespace.getTable();
final String valueColumn = namespace.getValueColumn();
final String keyColumn = namespace.getKeyColumn();
LOG.debug("Updating %s", entryId);
final List<Pair<String, String>> pairs = dbi.withHandle(new HandleCallback<List<Pair<String, String>>>() {
@Override
public List<Pair<String, String>> withHandle(Handle handle) throws Exception {
final String query;
query = String.format("SELECT %s, %s FROM %s", keyColumn, valueColumn, table);
return handle.createQuery(query).map(new ResultSetMapper<Pair<String, String>>() {
@Override
public Pair<String, String> map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
return new Pair<>(r.getString(keyColumn), r.getString(valueColumn));
}
}).list();
}
});
final String newVersion;
if (lastDBUpdate != null) {
newVersion = lastDBUpdate.toString();
} else {
newVersion = String.format("%d", dbQueryStart);
}
final CacheScheduler.VersionedCache versionedCache = scheduler.createVersionedCache(entryId, newVersion);
try {
final Map<String, String> cache = versionedCache.getCache();
for (Pair<String, String> pair : pairs) {
cache.put(pair.lhs, pair.rhs);
}
LOG.info("Finished loading %d values for %s", cache.size(), entryId);
return versionedCache;
} catch (Throwable t) {
try {
versionedCache.close();
} catch (Exception e) {
t.addSuppressed(e);
}
throw t;
}
}
use of org.skife.jdbi.v2.StatementContext in project dropwizard by dropwizard.
the class LoggingDBIExceptionMapperTest method testSqlExceptionIsCause.
@Test
public void testSqlExceptionIsCause() throws Exception {
StatementContext statementContext = mock(StatementContext.class);
RuntimeException runtimeException = new RuntimeException("DB is down");
SQLException sqlException = new SQLException("DB error", runtimeException);
DBIException dbiException = new NoResultsException("Unable get a result set", sqlException, statementContext);
dbiExceptionMapper.logException(9812, dbiException);
verify(logger).error("Error handling a request: 0000000000002654", sqlException);
verify(logger).error("Error handling a request: 0000000000002654", runtimeException);
verify(logger, never()).error("Error handling a request: 0000000000002654", dbiException);
}
use of org.skife.jdbi.v2.StatementContext in project SimpleFlatMapper by arnaudroger.
the class SfmResultSetMapperFactory method mapperFor.
@SuppressWarnings("unchecked")
@Override
public ResultSetMapper mapperFor(Class aClass, StatementContext statementContext) {
ResultSetMapper mapper = cache.get(aClass);
if (mapper == null) {
Mapper<ResultSet, ?> resultSetMapper = mapperFactory.newInstance(aClass);
mapper = toResultSetMapper(resultSetMapper);
ResultSetMapper<?> cachedMapper = cache.putIfAbsent(aClass, mapper);
if (cachedMapper != null) {
mapper = cachedMapper;
}
}
return mapper;
}
Aggregations