Improve the way meta lookups are caught & reported to the verbose handler

This commit is contained in:
Luck
2018-11-06 13:15:30 +00:00
Unverified
parent 8584a9b72c
commit 9988011308
6 changed files with 67 additions and 17 deletions
@@ -25,6 +25,8 @@
package me.lucko.luckperms.common.caching.type;
import com.google.common.collect.ForwardingListMultimap;
import com.google.common.collect.ForwardingMap;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSortedMap;
@@ -152,22 +154,20 @@ public class MetaCache implements MetaData {
@Override
public @NonNull ListMultimap<String, String> getMetaMultimap() {
return this.metaMultimap;
return getMetaMultimap(MetaCheckEvent.Origin.LUCKPERMS_API);
}
public ListMultimap<String, String> getMetaMultimap(MetaCheckEvent.Origin origin) {
return new VerboseLoggedMetaMultimap(origin);
}
@Override
public @NonNull Map<String, String> getMeta() {
return this.meta;
return getMeta(MetaCheckEvent.Origin.LUCKPERMS_API);
}
public String getMetaValue(String key, MetaCheckEvent.Origin origin) {
String value = this.meta.get(key);
// log this meta lookup to the verbose handler
VerboseHandler verboseHandler = this.metadata.getParentContainer().getPlugin().getVerboseHandler();
verboseHandler.offerMetaCheckEvent(origin, this.metadata.getObjectName(), this.metadata.getContext(), key, String.valueOf(value));
return value;
public Map<String, String> getMeta(MetaCheckEvent.Origin origin) {
return new VerboseLoggedMetaMap(origin);
}
@Override
@@ -180,4 +180,54 @@ public class MetaCache implements MetaData {
return this.suffixes;
}
private final class VerboseLoggedMetaMap extends ForwardingMap<String, String> {
private final MetaCheckEvent.Origin origin;
private VerboseLoggedMetaMap(MetaCheckEvent.Origin origin) {
this.origin = origin;
}
@Override
protected Map<String, String> delegate() {
return MetaCache.this.meta;
}
@Override
public String get(Object key) {
String value = super.get(key);
// log this meta lookup to the verbose handler
VerboseHandler verboseHandler = MetaCache.this.metadata.getParentContainer().getPlugin().getVerboseHandler();
verboseHandler.offerMetaCheckEvent(this.origin, MetaCache.this.metadata.getObjectName(), MetaCache.this.metadata.getContext(), (String) key, String.valueOf(value));
return value;
}
}
private final class VerboseLoggedMetaMultimap extends ForwardingListMultimap<String, String> {
private final MetaCheckEvent.Origin origin;
private VerboseLoggedMetaMultimap(MetaCheckEvent.Origin origin) {
this.origin = origin;
}
@Override
protected ListMultimap<String, String> delegate() {
return MetaCache.this.metaMultimap;
}
@Override
public List<String> get(String key) {
List<String> values = super.get(key);
// log this meta lookup to the verbose handler
VerboseHandler verboseHandler = MetaCache.this.metadata.getParentContainer().getPlugin().getVerboseHandler();
for (String value : values) {
verboseHandler.offerMetaCheckEvent(this.origin, MetaCache.this.metadata.getObjectName(), MetaCache.this.metadata.getContext(), key, String.valueOf(value));
}
return values;
}
}
}
@@ -264,14 +264,14 @@ public class DebugCommand extends SingleCommand {
})
.add("meta", () -> {
JObject metaMap = new JObject();
for (Map.Entry<String, String> entry : metaData.getMeta().entrySet()) {
for (Map.Entry<String, String> entry : metaData.getMeta(MetaCheckEvent.Origin.INTERNAL).entrySet()) {
metaMap.add(entry.getKey(), entry.getValue());
}
return metaMap;
})
.add("metaMap", () -> {
JObject metaMultimap = new JObject();
for (Map.Entry<String, Collection<String>> entry : metaData.getMetaMultimap().asMap().entrySet()) {
for (Map.Entry<String, Collection<String>> entry : metaData.getMetaMultimap(MetaCheckEvent.Origin.INTERNAL).asMap().entrySet()) {
JArray values = new JArray();
for (String v : entry.getValue()) {
values.add(v);
@@ -121,7 +121,7 @@ public class UserInfo extends SubCommand<User> {
suffix = "&f\"" + sussexValue + "&f\"";
}
ListMultimap<String, String> metaMap = data.getMetaMultimap();
ListMultimap<String, String> metaMap = data.getMetaMultimap(MetaCheckEvent.Origin.INTERNAL);
if (!metaMap.isEmpty()) {
meta = metaMap.entries().stream()
.map(e -> MessageUtils.contextToString(plugin.getLocaleManager(), e.getKey(), e.getValue()))