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
;
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
;
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
));
39 Map
<String
, RpcCostCalculator
> costCalculatorMap
, RpcOperationCostManager opCostMgr
) {
40 costCalculatorMap
.put(PKG
, new MailRpcCostCalculator(opCostMgr
.costOf(MAIL_RECIPIENT
)));