groovy - заменить значения в json при загрузке из jmx - PullRequest
0 голосов
/ 17 июня 2020

У меня есть кусок кода, как показано ниже. Это загрузка данных из JMX в инструмент мониторинга. К сожалению, есть некоторые значения NaN, которые не считываются должным образом инструментом мониторинга, и это прерывает передачу. Я намерен заменить значения NaN «на лету» на «null». Кто-нибудь знает, как это сделать?

BR

import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import java.security.PrivilegedAction;

def hostName = hostProps.get("system.hostname")
def jmxPort = "10002"
def query = "Hadoop:service=hiveserver2,name=hiveserver2"

def metricsURL = "http://${hostName}:${jmxPort}/jmx?qry=${query}"
def ad = true

public class FetchMetrics implements PrivilegedAction {

  def url;

  public FetchMetrics(String url) {
    this.url = url;
  }

  public Object run() {
    URL urlObject = new URL(url);
    def con = (HttpURLConnection) urlObject.openConnection();
    return con.getInputStream();
  }
}

lc = new LoginContext("Client");
lc.login();
Subject subject = lc.getSubject();

PrivilegedAction action = new FetchMetrics(metricsURL);
def metrics = Subject.doAsPrivileged(subject, action, null);

def jsonSlurper = new JsonSlurper()

def deviceMetrics = jsonSlurper.parse(metrics)


// Hit out endpoint and get our metrics
//deviceMetrics = jsonSlurper.parse(new URL(metricsURL))


deviceMetrics.'beans'[0].each {
    println it
}

return 0

1 Ответ

1 голос
/ 17 июня 2020

самый простой способ использовать LAX json slurper, однако он будет анализировать NaN как строку "NaN" ...

import groovy.json.JsonSlurper
import groovy.json.JsonParserType
import groovy.json.JsonBuilder

def jsonSlurper = new JsonSlurper().setType( JsonParserType.LAX )
def json = jsonSlurper.parseText('{ "a":111, "b": NaN}')


println new JsonBuilder(json).toPrettyString()

печатает

{
    "a": 111,
    "b": "NaN"
}
...