Skip to content

Commit aec957b

Browse files
authored
Merge pull request #5 from alexvasseur/pr_libupdate
lettucemod timeseries; default username auth in UI
2 parents 9b3ad16 + 044fabf commit aec957b

File tree

6 files changed

+36
-84
lines changed

6 files changed

+36
-84
lines changed

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@
5151
<version>2.12.3</version>
5252
</dependency>
5353
<dependency>
54-
<groupId>com.redislabs</groupId>
55-
<artifactId>spring-redisearch</artifactId>
56-
<version>3.1.2</version>
54+
<groupId>com.redis</groupId>
55+
<artifactId>spring-lettucemod</artifactId>
56+
<version>2.19.3</version>
5757
</dependency>
5858
<dependency>
5959
<groupId>com.github.javafaker</groupId>

src/main/java/com/redislabs/demos/redisbank/RedisTimeSeriesConfiguration.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/main/java/com/redislabs/demos/redisbank/timeseries/TimeSeriesCommands.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/main/java/com/redislabs/demos/redisbank/transactions/BankTransactionGenerator.java

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@
1313
import java.util.Map;
1414

1515
import com.fasterxml.jackson.core.JsonProcessingException;
16+
import com.redis.lettucemod.api.StatefulRedisModulesConnection;
17+
import com.redis.lettucemod.api.sync.RediSearchCommands;
18+
import com.redis.lettucemod.search.Field;
19+
import com.redis.lettucemod.timeseries.CreateOptions;
1620
import com.redislabs.demos.redisbank.SerializationUtil;
1721
import com.redislabs.demos.redisbank.Utilities;
18-
import com.redislabs.demos.redisbank.timeseries.TimeSeriesCommands;
19-
import com.redislabs.lettusearch.Field;
20-
import com.redislabs.lettusearch.Field.Text.PhoneticMatcher;
21-
import com.redislabs.lettusearch.RediSearchCommands;
22-
import com.redislabs.lettusearch.StatefulRediSearchConnection;
2322

2423
import org.slf4j.Logger;
2524
import org.slf4j.LoggerFactory;
@@ -47,14 +46,11 @@ public class BankTransactionGenerator {
4746
private final NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.GERMANY);
4847

4948
private final StringRedisTemplate redis;
50-
private final StatefulRediSearchConnection<String, String> connection;
51-
private final TimeSeriesCommands tsc;
49+
private final StatefulRedisModulesConnection<String, String> connection;
5250

53-
public BankTransactionGenerator(StringRedisTemplate redis, StatefulRediSearchConnection<String, String> connection,
54-
TimeSeriesCommands tsc) throws NoSuchAlgorithmException, UnsupportedEncodingException {
51+
public BankTransactionGenerator(StringRedisTemplate redis, StatefulRedisModulesConnection<String, String> connection) throws NoSuchAlgorithmException, UnsupportedEncodingException {
5552
this.redis = redis;
5653
this.connection = connection;
57-
this.tsc = tsc;
5854
transactionSources = SerializationUtil.loadObjectList(TransactionSource.class, "/transaction_sources.csv");
5955
random = SecureRandom.getInstance("SHA1PRNG");
6056
random.setSeed("lars".getBytes("UTF-8")); // Prime the RNG so it always generates the same pseudorandom set
@@ -70,8 +66,8 @@ public BankTransactionGenerator(StringRedisTemplate redis, StatefulRediSearchCon
7066
private void createSearchIndices() {
7167
RediSearchCommands<String, String> commands = connection.sync();
7268
try {
73-
commands.dropIndex(ACCOUNT_INDEX);
74-
commands.dropIndex(SEARCH_INDEX);
69+
commands.dropindex(ACCOUNT_INDEX);
70+
commands.dropindex(SEARCH_INDEX);
7571
} catch (RedisCommandExecutionException e) {
7672
if (!e.getMessage().equals("Unknown Index name")) {
7773
LOGGER.error("Error dropping index: {}", e.getMessage());
@@ -81,9 +77,9 @@ private void createSearchIndices() {
8177
commands.create(ACCOUNT_INDEX, Field.text("toAccountName").build());
8278
LOGGER.info("Created {} index", ACCOUNT_INDEX);
8379

84-
commands.create(SEARCH_INDEX, Field.text("description").matcher(PhoneticMatcher.English).build(),
85-
Field.text("fromAccountName").matcher(PhoneticMatcher.English).build(),
86-
Field.text("transactionType").matcher(PhoneticMatcher.English).build());
80+
commands.create(SEARCH_INDEX, Field.text("description").matcher(Field.TextField.PhoneticMatcher.ENGLISH).build(),
81+
Field.text("fromAccountName").matcher(Field.TextField.PhoneticMatcher.ENGLISH).build(),
82+
Field.text("transactionType").matcher(Field.TextField.PhoneticMatcher.ENGLISH).build());
8783
LOGGER.info("Created {} index", SEARCH_INDEX);
8884
}
8985

@@ -95,7 +91,8 @@ private void deleteSortedSet() {
9591

9692
private void createTimeSeries() {
9793
redis.delete(BALANCE_TS);
98-
tsc.create(BALANCE_TS, 0);
94+
CreateOptions co = CreateOptions.builder().retentionPeriod(0).build();
95+
connection.sync().create(BALANCE_TS, co);
9996
LOGGER.info("Created {} time seris", BALANCE_TS);
10097
}
10198

@@ -153,7 +150,7 @@ private String createTransactionAmount(String accountName) {
153150
}
154151

155152
balance = balance + roundedAmount;
156-
tsc.add(BALANCE_TS, balance);
153+
connection.sync().addAutoTimestamp(BALANCE_TS, balance);
157154
redis.opsForZSet().incrementScore(SORTED_SET_KEY, accountName, roundedAmount * -1);
158155

159156
return nf.format(roundedAmount);

src/main/java/com/redislabs/demos/redisbank/transactions/TransactionOverviewController.java

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
package com.redislabs.demos.redisbank.transactions;
22

3+
import java.util.List;
34
import java.util.Map;
45
import java.util.Map.Entry;
56
import java.util.Set;
67

8+
import com.redis.lettucemod.api.StatefulRedisModulesConnection;
9+
import com.redis.lettucemod.api.sync.RediSearchCommands;
10+
import com.redis.lettucemod.search.SearchOptions;
11+
import com.redis.lettucemod.search.SearchResults;
12+
import com.redis.lettucemod.timeseries.Sample;
13+
import com.redis.lettucemod.timeseries.TimeRange;
714
import com.redislabs.demos.redisbank.Config;
815
import com.redislabs.demos.redisbank.Config.StompConfig;
9-
import com.redislabs.demos.redisbank.timeseries.TimeSeriesCommands;
10-
import com.redislabs.lettusearch.RediSearchCommands;
11-
import com.redislabs.lettusearch.SearchOptions;
12-
import com.redislabs.lettusearch.SearchOptions.Highlight;
13-
import com.redislabs.lettusearch.SearchOptions.Highlight.Tag;
14-
import com.redislabs.lettusearch.SearchResults;
15-
import com.redislabs.lettusearch.StatefulRediSearchConnection;
1616

1717
import org.springframework.data.redis.core.StringRedisTemplate;
1818
import org.springframework.data.redis.core.ZSetOperations.TypedTuple;
@@ -33,15 +33,13 @@ public class TransactionOverviewController {
3333
private static final String SORTED_SET_KEY = "bigspenders";
3434

3535
private final Config config;
36-
private final StatefulRediSearchConnection<String, String> srsc;
36+
private final StatefulRedisModulesConnection<String, String> srsc;
3737
private final StringRedisTemplate redis;
38-
private final TimeSeriesCommands tsc;
3938

40-
public TransactionOverviewController(Config config, StatefulRediSearchConnection<String, String> srsc,
41-
TimeSeriesCommands tsc, StringRedisTemplate redis) {
39+
public TransactionOverviewController(Config config, StatefulRedisModulesConnection<String, String> srsc,
40+
StringRedisTemplate redis) {
4241
this.config = config;
4342
this.srsc = srsc;
44-
this.tsc = tsc;
4543
this.redis = redis;
4644
}
4745

@@ -52,13 +50,14 @@ public StompConfig stompConfig() {
5250

5351
@GetMapping("/balance")
5452
public Balance[] balance() {
55-
Map<String, String> tsValues = tsc.range(BALANCE_TS, System.currentTimeMillis() - (1000 * 60 * 60 * 24 * 7),
56-
System.currentTimeMillis());
53+
List<Sample> tsValues = srsc.sync().range(BALANCE_TS,
54+
TimeRange.from(System.currentTimeMillis() - (1000 * 60 * 60 * 24 * 7))
55+
.to(System.currentTimeMillis()).build());
5756
Balance[] balanceTs = new Balance[tsValues.size()];
5857
int i = 0;
5958

60-
for (Entry<String, String> entry : tsValues.entrySet()) {
61-
Object keyString = entry.getKey();
59+
for (Sample entry : tsValues) {
60+
Object keyString = entry.getTimestamp();
6261
Object valueString = entry.getValue();
6362
balanceTs[i] = new Balance(keyString, valueString);
6463
i++;
@@ -91,9 +90,8 @@ public SearchResults<String, String> searchTransactions(@RequestParam("term") St
9190
RediSearchCommands<String, String> commands = srsc.sync();
9291

9392
SearchOptions options = SearchOptions
94-
.builder().highlight(Highlight.builder().field("description").field("fromAccountName")
95-
.field("transactionType").tag(Tag.builder().open("<mark>").close("</mark>").build()).build())
96-
.build();
93+
.builder().highlight(SearchOptions.Highlight.builder().field("description").field("fromAccountName")
94+
.field("transactionType").tags("<mark>","</mark>").build()).build();
9795

9896
SearchResults<String, String> results = commands.search(SEARCH_INDEX, term, options);
9997
return results;

src/main/resources/static/auth-login.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ <h1 class="auth-subtitle">Welcome to Redis Enterprise Bank!</h1>
2626

2727
<form name="f" action="/perform_login" method="POST">
2828
<div class="form-group position-relative has-icon-left mb-4">
29-
<input type="text" name="username" class="form-control form-control-xl" placeholder="Username" autofocus>
29+
<input type="text" name="username" value="lars" class="form-control form-control-xl" placeholder="Username" autofocus>
3030
<div class="form-control-icon">
3131
<i class="bi bi-person"></i>
3232
</div>
3333
</div>
3434
<div class="form-group position-relative has-icon-left mb-4">
35-
<input type="password" name="password" class="form-control form-control-xl" placeholder="Password">
35+
<input type="password" name="password" value="larsje" class="form-control form-control-xl" placeholder="Password">
3636
<div class="form-control-icon">
3737
<i class="bi bi-shield-lock"></i>
3838
</div>

0 commit comments

Comments
 (0)