• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

sonus21 / rqueue / 25600722838

09 May 2026 12:06PM UTC coverage: 83.396% (-5.3%) from 88.677%
25600722838

push

github

web-flow
Nats v2 web (#295)

* ci: compile main sources in coverage_report job

The coverage_report job was producing an effectively empty
jacocoTestReport.xml (3.4KB vs ~1.1MB locally) because no .class files
existed when coverageReportOnly ran — the job checked out source code
and downloaded .exec artifacts, but never compiled. JaCoCo's report
generator skips packages/classes it cannot resolve, so the merged XML
ended up with only <sessioninfo> entries and no <package> elements.

That made coverallsJacoco silently no-op via the
"source file set empty, skipping" branch in CoverallsReporter, so
"Push coverage to Coveralls" reported success without uploading.

Verified by downloading the coverage-report artifact from a recent run
and comparing its XML structure against a local build's report.

Assisted-By: Claude Code

* nats-web: implement pause / soft-delete admin ops and capability-aware Q-detail

Replace the all-stub `NatsRqueueUtilityService` with real impls for the operations
JetStream can model: `pauseUnpauseQueue` persists the `paused` flag on `QueueConfig`
in the queue-config KV bucket and notifies the local listener container so the poller
stops dispatching; `deleteMessage` is a soft delete via `MessageMetadataService`
(stream message persists, dashboard hides via the metadata flag); `getDataType`
reports `STREAM`. `moveMessage`, `enqueueMessage`, and `makeEmpty` deliberately
remain "not supported" — there is no JetStream primitive for those.

Update `RqueueQDetailServiceImpl.getRunningTasks` / `getScheduledTasks` to return
header-only tables when the broker capabilities suppress those sections, instead of
emitting zero rows or 501s on NATS.

20 new unit tests cover the pause/delete paths and lock in the still-unsupported
operations. Updates `nats-task.md` / `nats-task-v2.md` to reflect what landed.

Assisted-By: Claude Code

* nats-web: capability-aware nav / charts and stream-based peek

End-to-end browser-tested the NATS dashboard and shipped the t... (continued)

2566 of 3407 branches covered (75.32%)

Branch coverage included in aggregate %.

795 of 1072 new or added lines in 22 files covered. (74.16%)

312 existing lines in 38 files now uncovered.

7715 of 8921 relevant lines covered (86.48%)

0.86 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

76.92
/rqueue-core/src/main/java/com/github/sonus21/rqueue/utils/HttpUtils.java
1
/*
2
 * Copyright (c) 2020-2026 Sonu Kumar
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * You may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *     https://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and limitations under the License.
14
 *
15
 */
16

17
package com.github.sonus21.rqueue.utils;
18

19
import com.github.sonus21.rqueue.config.RqueueConfig;
20
import com.github.sonus21.rqueue.serdes.SerializationUtils;
21
import java.net.InetSocketAddress;
22
import java.net.ProxySelector;
23
import java.net.URI;
24
import java.net.http.HttpClient;
25
import java.net.http.HttpRequest;
26
import java.net.http.HttpResponse;
27
import java.time.Duration;
28
import lombok.extern.slf4j.Slf4j;
29

30
@Slf4j
1✔
31
public final class HttpUtils {
32

33
  private HttpUtils() {}
34

35
  private static HttpClient buildClient(RqueueConfig rqueueConfig) {
36
    HttpClient.Builder builder =
37
        HttpClient.newBuilder().connectTimeout(Duration.ofMillis(2 * Constants.ONE_MILLI_INT));
1✔
38
    if (!StringUtils.isEmpty(rqueueConfig.getProxyHost())) {
1!
39
      builder.proxy(ProxySelector.of(
×
UNCOV
40
          new InetSocketAddress(rqueueConfig.getProxyHost(), rqueueConfig.getProxyPort())));
×
41
    }
42
    return builder.build();
1✔
43
  }
44

45
  public static <T> T readUrl(RqueueConfig rqueueConfig, String url, Class<T> clazz) {
46
    try {
47
      HttpClient client = buildClient(rqueueConfig);
1✔
48
      HttpRequest request = HttpRequest.newBuilder(URI.create(url))
1✔
49
          .timeout(Duration.ofMillis(2 * Constants.ONE_MILLI_INT))
1✔
50
          .header("Accept", "application/json")
1✔
51
          .GET()
1✔
52
          .build();
1✔
53
      HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
1✔
54
      if (response.statusCode() / 100 != 2) {
1!
UNCOV
55
        log.error("GET {} returned status {}", url, response.statusCode());
×
UNCOV
56
        return null;
×
57
      }
58
      return SerializationUtils.getSerDes().deserialize(response.body(), clazz);
1✔
UNCOV
59
    } catch (Exception e) {
×
UNCOV
60
      log.error("GET call failed for {}", url, e);
×
UNCOV
61
      return null;
×
62
    }
63
  }
64

65
  public static String joinPath(String... components) {
66
    StringBuilder sb = new StringBuilder();
1✔
67
    for (String comp : components) {
1✔
68
      if (StringUtils.isEmpty(comp) || comp.equals(Constants.FORWARD_SLASH)) {
1✔
69
        continue;
1✔
70
      }
71
      sb.append(Constants.FORWARD_SLASH);
1✔
72
      if (comp.endsWith(Constants.FORWARD_SLASH) && comp.startsWith(Constants.FORWARD_SLASH)) {
1!
73
        sb.append(comp, 1, comp.length() - 1);
1✔
74
      } else if (comp.endsWith(Constants.FORWARD_SLASH)) {
1!
UNCOV
75
        sb.append(comp, 0, comp.length() - 1);
×
76
      } else if (comp.startsWith(Constants.FORWARD_SLASH)) {
1✔
77
        sb.append(comp.substring(1));
1✔
78
      } else {
79
        sb.append(comp);
1✔
80
      }
81
    }
82
    sb.append(Constants.FORWARD_SLASH);
1✔
83
    return sb.toString();
1✔
84
  }
85
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc