Search in sources :

Example 1 with Indexer

use of com.bluenimble.platform.indexer.Indexer in project serverless by bluenimble.

the class IndexerApiRequestTrack method finish.

@Override
public void finish(JsonObject feedback) {
    final Date now = new Date();
    Json.getObject(track, Fields.Time.class.getSimpleName().toLowerCase()).set(Fields.Time.Finished, Lang.toString(now, DateFormat));
    int code = Json.getInteger(feedback, ApiResponse.Error.Code, ApiResponse.OK.getCode());
    track.set(Fields.Status, code);
    if (feedback.containsKey(Fields.FeedBack.Message)) {
        feedback.set(Fields.FeedBack.Message, feedback.get(Fields.FeedBack.Message).toString());
    }
    track.set(Fields.Feedback, feedback);
    JsonObject metrics = Json.getObject(track, Fields.Metrics.class.getSimpleName().toLowerCase());
    if (MX.isCurrentThreadCpuTimeSupported()) {
        metrics.set(Fields.Metrics.Cpu, MX.getCurrentThreadUserTime());
    }
    if (MX.isCurrentThreadCpuTimeSupported()) {
        metrics.set(Fields.Metrics.Memory, MX.getThreadAllocatedBytes(Thread.currentThread().getId()));
    }
    try {
        tracker.executor().execute(new Runnable() {

            @Override
            public void run() {
                api.tracer().log(Tracer.Level.Info, "Executor Started Track Thread ...");
                // shrink
                track.shrink();
                JsonObject oTracking = api.getTracking();
                // put
                Indexer indexer = null;
                try {
                    indexer = api.space().feature(Indexer.class, Json.getString(oTracking, Spec.Feature, ApiSpace.Features.Default), tracker.context());
                    if (indexer == null) {
                        api.tracer().log(Tracer.Level.Error, "CantStore[{0}] due to indexer declared in the api is not defined at the space level", track.toString());
                        return;
                    }
                    String entity = Json.getString(oTracking, Spec.Entity, DefaultEntity);
                    if (!indexer.exists(entity)) {
                        api.tracer().log(Tracer.Level.Info, "Entity not found in Index, Create Mapping...");
                        indexer.create(entity, requestMapping());
                    }
                    indexer.put(entity, track);
                } catch (IndexerException e) {
                    api.tracer().log(Tracer.Level.Error, "CantStore[{0}] due to {1}", track.toString(), e.getMessage());
                    api.tracer().log(Tracer.Level.Error, Lang.BLANK, e);
                }
            }
        });
    } catch (Exception ex) {
        api.tracer().log(Tracer.Level.Error, Lang.BLANK, ex);
    }
}
Also used : Indexer(com.bluenimble.platform.indexer.Indexer) JsonObject(com.bluenimble.platform.json.JsonObject) IndexerException(com.bluenimble.platform.indexer.IndexerException) Date(java.util.Date) IndexerException(com.bluenimble.platform.indexer.IndexerException)

Aggregations

Indexer (com.bluenimble.platform.indexer.Indexer)1 IndexerException (com.bluenimble.platform.indexer.IndexerException)1 JsonObject (com.bluenimble.platform.json.JsonObject)1 Date (java.util.Date)1