Package com.dianping.cat.report.page.model.logview

Source Code of com.dianping.cat.report.page.model.logview.LocalMessageService

package com.dianping.cat.report.page.model.logview;

import java.nio.charset.Charset;

import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.unidal.lookup.annotation.Inject;

import com.dianping.cat.Cat;
import com.dianping.cat.message.Message;
import com.dianping.cat.message.Transaction;
import com.dianping.cat.message.internal.MessageId;
import com.dianping.cat.message.spi.MessageCodec;
import com.dianping.cat.message.spi.MessageTree;
import com.dianping.cat.report.page.model.spi.internal.BaseLocalModelService;
import com.dianping.cat.service.ModelPeriod;
import com.dianping.cat.service.ModelRequest;
import com.dianping.cat.service.ModelResponse;
import com.dianping.cat.storage.dump.LocalMessageBucketManager;
import com.dianping.cat.storage.dump.MessageBucketManager;

public class LocalMessageService extends BaseLocalModelService<String> {
  @Inject(LocalMessageBucketManager.ID)
  private MessageBucketManager m_bucketManager;

  @Inject("html")
  private MessageCodec m_codec;

  public LocalMessageService() {
    super("logview");
  }

  @Override
  protected String getReport(ModelRequest request, ModelPeriod period, String domain) throws Exception {
    String messageId = request.getProperty("messageId");

    if (messageId == null) {
      return null;
    }

    MessageTree tree = m_bucketManager.loadMessage(messageId);

    if (tree != null) {
      ChannelBuffer buf = ChannelBuffers.dynamicBuffer(8192);

      if (tree.getMessage() instanceof Transaction && request.getProperty("waterfall", "false").equals("true")) {
        // to work around a plexus injection bug
        MessageCodec codec = lookup(MessageCodec.class, "waterfall");

        codec.encode(tree, buf);
      } else {
        m_codec.encode(tree, buf);
      }

      try {
        buf.readInt(); // get rid of length
        return buf.toString(Charset.forName("utf-8"));
      } catch (Exception e) {
        // ignore it
      }
    }
    return null;
  }

  @Override
  public ModelResponse<String> invoke(ModelRequest request) {
    ModelResponse<String> response = new ModelResponse<String>();
    Transaction t = Cat.newTransaction("ModelService", getClass().getSimpleName());

    try {
      ModelPeriod period = request.getPeriod();
      String domain = request.getDomain();
      String report = getReport(request, period, domain);

      response.setModel(report);

      t.addData("period", period);
      t.addData("domain", domain);
      t.setStatus(Message.SUCCESS);
    } catch (Exception e) {
      Cat.logError(e);
      t.setStatus(e);
      response.setException(e);
    } finally {
      t.complete();
    }
    return response;
  }

  @Override
  public boolean isEligable(ModelRequest request) {
    boolean eligibale = request.getPeriod().isCurrent();

    if (eligibale) {
      String messageId = request.getProperty("messageId");
      MessageId id = MessageId.parse(messageId);

      return id.getVersion() == 2;
    }

    return eligibale;
  }
}
TOP

Related Classes of com.dianping.cat.report.page.model.logview.LocalMessageService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.