App Engine Java SDK version 1.7.0
[gae.git] / java / src / main / com / google / appengine / tools / appstats / MailRpcCostCalculator.java
blob23f6adf09bc8bd2ebb39c24cf012ebce3a5a3588
1 // Copyright 2012 Google Inc. All Rights Reserved.
2 package com.google.appengine.tools.appstats;
4 import com.google.appengine.api.mail.MailServicePb;
6 import static com.google.appengine.tools.appstats.StatsProtos.BilledOpProto.BilledOp.MAIL_RECIPIENT;
8 import java.util.Arrays;
9 import java.util.Map;
11 /**
12 * {@link RpcCostCalculator} implementation for the Mail API.
15 class MailRpcCostCalculator implements RpcCostCalculator {
17 private static final String PKG = "mail";
19 private final long recipientCostMicropennies;
21 MailRpcCostCalculator(long recipientCostMicropennies) {
22 this.recipientCostMicropennies = recipientCostMicropennies;
25 @Override
26 public RpcCost determineCost(String methodName, byte[] request, byte[] response) {
27 if (methodName.equals("Send") || methodName.equals("SendToAdmin")) {
28 MailServicePb.MailMessage proto = new MailServicePb.MailMessage();
29 proto.parseFrom(request);
30 int numRecipients = proto.toSize() + proto.ccSize() + proto.bccSize();
31 StatsProtos.BilledOpProto billedOpProto = StatsProtos.BilledOpProto.newBuilder()
32 .setNumOps(numRecipients).setOp(MAIL_RECIPIENT).build();
33 return new RpcCost(recipientCostMicropennies * numRecipients, Arrays.asList(billedOpProto));
35 return FREE;
38 static void register(
39 Map<String, RpcCostCalculator> costCalculatorMap, RpcOperationCostManager opCostMgr) {
40 costCalculatorMap.put(PKG, new MailRpcCostCalculator(opCostMgr.costOf(MAIL_RECIPIENT)));