亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 java-List<T> 轉換為可用于 iomicrometer 的 MultiGauge 的流

將 java-List<T> 轉換為可用于 iomicrometer 的 MultiGauge 的流

動漫人物 2023-03-09 14:36:14
從我的 springboot 應用程序中,我收到了一個結果列表List<T>,其中包含從數據庫表中讀取的 100 個元素T包含字段唯一標識符經度緯度價值我想把它變成多個千分尺,比如object{id=<unique identifier>,longitude=<longitude>,latitude=<latitude>} <value>object{id=<unique identifier>,longitude=<longitude>,latitude=<latitude>} <value>object{id=<unique identifier>,longitude=<longitude>,latitude=<latitude>} <value>...指標應由普羅米修斯抓取,然后使用grafana/worldmap 可視化 我正在使用構建我的多儀表 MultiGauge l100 = MultiGauge.builder("metric-last100").register(registry);List<T>并且在將其轉換為流以供提供時非常失敗,l100.register(...)如下所示:// SELECT count(*) from job group by status WHERE job = 'dirty'     MultiGauge statuses = MultiGauge.builder("statuses")        .tag("job", "dirty")        .description("The number of widgets in various statuses")        .baseUnit("widgets")        .register(registry);...// run this periodically whenever you re-run your query     statuses.register(  resultSet.stream().map(result ->     Row.of(Tags.of("status", result.getAsString("status")),         result.getAsInt("count"))))這是我的實際代碼:private MultiGauge l100;...l100 = MultiGauge.builder("ids-metric-last100").register(registry);...   public void updateMetricLast100Deliveries() {  List<C3MpGeodataDOM> last100 = c3MpGeodataDAO.getlast100();  l100.register(    last100.stream().map(        res -> Row.of(            Tags.of(                "sdgnr", res.getMpPK().getSdgnr(),                "latitude", "" + res.getGeo_latitude(),                "longitude", "" + res.getGeo_longitude()),            1)));}請原諒我的愚蠢,有人可以幫忙嗎?
查看完整描述

1 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

你可以嘗試做這樣的事情:


1 - 創建一個類來存儲您的結果并將數據轉換為 MultiGauge.Row


@Data

@Builder

@AllArgsConstructor

@NoArgsConstructor

public class UserData {


  private String gender;

  private Long counter;


  public MultiGauge.Row<UserData> toRow() {

    return MultiGauge.Row.of(Tags.of("gender", gender), this, c -> this.counter);

  }


}

2 - 創建自定義查詢以對結果進行分組


@Query(value = "select new multigauge.multigauge.UserData(usr.gender, count(usr.id)) " +

    "from users usr " +

    "group by usr.gender")

   List<UserData> retrieveUsersGroupedByGender();

3 - 使用 toRow 方法轉換列表并注冊您的 MultiGauge


@Scheduled(fixedDelay = 1000)

  public void updateGauges() {

    multiGauge.register(userRepository.retrieveUsersGroupedByGender()

      .stream()

      .map(UserData::toRow)

      .collect(toList()), true);

  }

4 - 初始化您的 MultiGauge


@PostConstruct

  public void init() {

    multiGauge = MultiGauge.builder("users_grouped_by_gender_metric").register(prometheusMeterRegistry);

  }

我建議查看官方 GitHub 存儲庫中的單元測試:


https://github.com/micrometer-metrics/micrometer/blob/master/micrometer-core/src/test/java/io/micrometer/core/instrument/MultiGaugeTest.java


查看完整回答
反對 回復 2023-03-09
  • 1 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號