liriming
2025-01-14 0809aa554fc906e73a383c34f88bb4153bb69b00
提交 | 用户 | 时间
a955f1 1 package com.iailab.module.model.influxdb.common.config;
D 2
3 import com.iailab.framework.tenant.core.context.TenantContextHolder;
4 import com.influxdb.client.InfluxDBClient;
5 import com.influxdb.client.InfluxDBClientFactory;
6 import com.influxdb.client.domain.Bucket;
48fb4a 7 import com.influxdb.client.domain.BucketRetentionRules;
a955f1 8 import com.influxdb.client.domain.Organization;
D 9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11 import org.springframework.beans.factory.annotation.Value;
12 import org.springframework.stereotype.Component;
13
14 import java.util.HashSet;
15 import java.util.Set;
16
17 /**
18  * @author PanZhibao
19  * @Description
20  * @createTime 2023年04月25日 17:13:00
21  */
22 @Component
23 public class InfluxDBInstance {
24
25     @Value("${influx-db.org}")
26     public String org;
27
28     /*@Value("${influx-db.bucket}")
29     public String bucket;*/
30
31     @Value("${influx-db.token}")
32     public String token;
33
34     @Value("${influx-db.url}")
35     public String url;
36
37     private Set<String> isExistBucket = new HashSet<>();
38
39     private final static String BUCKET_NAME = "bucket_model_";
40
41     private Logger logger = LoggerFactory.getLogger(getClass());
42
43     private InfluxDBClient client;
48fb4a 44     // bucket过期时间
D 45     private Integer everySeconds = 3600 * 24 * 10;
a955f1 46
D 47     public InfluxDBClient getClient() {
48         try {
49             if (client == null) {
50                 client = InfluxDBClientFactory.create(url, token.toCharArray());
51             }
52         } catch (Exception ex) {
53             ex.printStackTrace();
54             logger.error("创建InfluxDBClient失败!");
55         }
56         return client;
57     }
58
59     public String getBucket() {
60         String bucketName = BUCKET_NAME + TenantContextHolder.getRequiredTenantId();
61         // 判断Bucket是否存在,不存在则创建
62         if (!isExistBucket.contains(bucketName)) {
63             Bucket bucketByName = client.getBucketsApi().findBucketByName(bucketName);
64             if (null == bucketByName) {
65                 Organization organization = client.getOrganizationsApi().findOrganizations().stream().filter(e -> e.getName().equals(org)).findFirst().orElseThrow(() -> new RuntimeException("influxdb:org不存在,org:" + org));
48fb4a 66                 // 创建Bucket,并设置过期时间
D 67                 client.getBucketsApi().createBucket(bucketName,new BucketRetentionRules().everySeconds(everySeconds),organization);
a955f1 68             }else {
D 69                 isExistBucket.add(bucketName);
70             }
71         }
72         return bucketName;
73     }
74
75 }