MergeData.java 1.9 KB
Newer Older
P
pengys5 已提交
1 2 3
package com.a.eye.skywalking.collector.worker.storage;

import com.a.eye.skywalking.collector.actor.selector.AbstractHashMessage;
P
Fix 159  
pengys5 已提交
4 5

import java.util.*;
P
pengys5 已提交
6 7 8 9

/**
 * @author pengys5
 */
P
Fix 159  
pengys5 已提交
10 11
public class MergeData extends AbstractHashMessage implements Data {

12
    public static final String SPLIT = ",";
P
pengys5 已提交
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

    private String id;

    private Map<String, Set<String>> mergeData = new HashMap<>();

    public MergeData(String key) {
        super(key);
        this.id = key;
    }

    public String getId() {
        return id;
    }

    public void setMergeData(String column, String value) {
        if (!mergeData.containsKey(column)) {
            mergeData.put(column, new HashSet<>());
        }
        mergeData.get(column).add(value);
    }

    public void merge(MergeData data) {
P
Fix 159  
pengys5 已提交
35
        data.mergeData.forEach((column, valueSet) -> valueSet.forEach(value -> setMergeData(column, value)));
P
pengys5 已提交
36 37
    }

P
Fix 159  
pengys5 已提交
38 39 40 41
    public void merge(Map<String, ?> dbData) {
        dbData.forEach((column, dbValue) -> {
            if (!AbstractIndex.TIME_SLICE.equals(column) && !AbstractIndex.AGG_COLUMN.equals(column)) {
                String[] dbValues = String.valueOf(dbValue).split(SPLIT);
P
pengys5 已提交
42
                for (String value : dbValues) {
P
Fix 159  
pengys5 已提交
43
                    setMergeData(column, value);
P
pengys5 已提交
44 45
                }
            }
P
Fix 159  
pengys5 已提交
46
        });
P
pengys5 已提交
47 48
    }

P
Fix 159  
pengys5 已提交
49
    public Map<String, String> asMap() {
P
pengys5 已提交
50
        Map<String, String> source = new HashMap<>();
P
Fix 159  
pengys5 已提交
51 52 53
        mergeData.forEach((column, valueSet) -> {
            Iterator<String> iterator = valueSet.iterator();
            StringBuilder builder = new StringBuilder();
P
pengys5 已提交
54 55

            int i = 0;
P
Fix 159  
pengys5 已提交
56

P
pengys5 已提交
57 58
            while (iterator.hasNext()) {
                if (i == 0) {
P
Fix 159  
pengys5 已提交
59
                    builder.append(iterator.next());
P
pengys5 已提交
60
                } else {
P
Fix 159  
pengys5 已提交
61
                    builder.append(SPLIT).append(iterator.next());
P
pengys5 已提交
62 63 64
                }
                i++;
            }
P
Fix 159  
pengys5 已提交
65 66
            source.put(column, builder.toString());
        });
P
pengys5 已提交
67 68 69

        return source;
    }
P
Fix 159  
pengys5 已提交
70
}