Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1445)

Side by Side Diff: src/data_plan.h

Issue 6250171: cashew: reset local counter on plan transition (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/cashew.git@master
Patch Set: ers review comments Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/byte_counter.h ('k') | src/data_plan.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // TODO(vlaviano): update accessor style (GetFoo/SetFoo -> foo) 5 // TODO(vlaviano): update accessor style (GetFoo/SetFoo -> foo)
6 6
7 #ifndef SRC_DATA_PLAN_H_ 7 #ifndef SRC_DATA_PLAN_H_
8 #define SRC_DATA_PLAN_H_ 8 #define SRC_DATA_PLAN_H_
9 9
10 #include <map> 10 #include <map>
11 #include <string> 11 #include <string>
12 #include <vector> 12 #include <vector>
13 13
14 #include <base/basictypes.h> // NOLINT 14 #include <base/basictypes.h> // NOLINT
15 #include <base/time.h> // NOLINT 15 #include <base/time.h> // NOLINT
16 #include <dbus-c++/dbus.h> // NOLINT 16 #include <dbus-c++/dbus.h> // NOLINT
17 17
18 #include "src/values.h" 18 #include "src/values.h"
19 19
20 namespace cashew { 20 namespace cashew {
21 21
22 class DataPlan; 22 class DataPlan;
23 class Device;
23 class Policy; 24 class Policy;
25 class Service;
26 class ServiceManager;
24 27
25 // byte count 28 // byte count
26 // TODO(vlaviano): this should be a uint64, but libcros/Chrome expects this 29 // TODO(vlaviano): this should be a uint64, but libcros/Chrome expects this
27 typedef int64 Bytes; 30 typedef int64 ByteCount;
28 31
29 // List of DataPlan objects 32 // List of DataPlan objects
30 // TODO(vlaviano): consider promoting this from a typedef to a class 33 // TODO(vlaviano): consider promoting this from a typedef to a class
31 typedef std::vector<DataPlan*> DataPlanList; 34 typedef std::vector<DataPlan*> DataPlanList;
32 35
33 // DataPlan object formatted for D-Bus (using DBus::Variants to wrap fields) 36 // DataPlan object formatted for D-Bus (using DBus::Variants to wrap fields)
34 typedef std::map<std::string, DBus::Variant> DBusDataPlan; 37 typedef std::map<std::string, DBus::Variant> DBusDataPlan;
35 38
36 // List of DataPlan objects formatted for D-Bus 39 // List of DataPlan objects formatted for D-Bus
37 typedef std::vector<DBusDataPlan> DBusDataPlanList; 40 typedef std::vector<DBusDataPlan> DBusDataPlanList;
38 41
39 // Represents a data plan associated with a cellular service 42 // Represents a data plan associated with a cellular service
40 class DataPlan { 43 class DataPlan {
41 public: 44 public:
42 // valid type values for this plan 45 // valid type values for this plan
43 typedef enum { 46 typedef enum {
44 kTypeUnlimited = 0, 47 kTypeUnlimited = 0,
45 kTypeMeteredFree, 48 kTypeMeteredFree,
46 kTypeMeteredPaid, 49 kTypeMeteredPaid,
47 } Type; 50 } Type;
48 51
49 // |data_bytes_max| must be set to 0 for unlimited plans 52 // |data_bytes_max| must be set to 0 for unlimited plans
50 DataPlan(const std::string& name, DataPlan::Type type, 53 DataPlan(const std::string& name, DataPlan::Type type,
51 base::Time update_time, base::Time start_time, 54 base::Time update_time, base::Time start_time,
52 base::Time end_time, Bytes data_bytes_max, Bytes data_bytes_used); 55 base::Time end_time, ByteCount data_bytes_max,
56 ByteCount data_bytes_used);
53 virtual ~DataPlan(); 57 virtual ~DataPlan();
54 58
55 // get plan name 59 // get plan name
56 virtual const std::string& GetName() const; 60 virtual const std::string& GetName() const;
57 61
58 // get plan type 62 // get plan type
59 virtual Type GetType() const; 63 virtual Type GetType() const;
60 64
61 // get last update time 65 // get last update time
62 virtual base::Time GetUpdateTime() const; 66 virtual base::Time GetUpdateTime() const;
63 67
64 // get plan start time 68 // get plan start time
65 virtual base::Time GetStartTime() const; 69 virtual base::Time GetStartTime() const;
66 70
67 // get plan end time 71 // get plan end time
68 virtual base::Time GetEndTime() const; 72 virtual base::Time GetEndTime() const;
69 73
70 // get plan max bytes 74 // get plan max bytes
71 virtual Bytes GetDataBytesMax() const; 75 virtual ByteCount GetDataBytesMax() const;
72 76
73 // get plan used bytes 77 // get plan used bytes
74 virtual Bytes GetDataBytesUsed() const; 78 virtual ByteCount GetDataBytesUsed() const;
75 79
76 // get local used bytes 80 // get local used bytes
77 virtual Bytes GetLocalBytesUsed() const; 81 virtual ByteCount GetLocalBytesUsed() const;
78 82
79 // set local used bytes 83 // set local used bytes
80 // must be >= 0 84 // must be >= 0
81 virtual void SetLocalBytesUsed(Bytes local_bytes_used); 85 virtual void SetLocalBytesUsed(ByteCount local_bytes_used);
82 86
83 // get total used bytes 87 // get total used bytes
84 virtual Bytes GetTotalBytesUsed() const; 88 virtual ByteCount GetTotalBytesUsed() const;
85 89
86 // is this an active plan? 90 // is this an active plan?
87 // we define active to mean that the plan is current and not exhausted 91 // we define active to mean that the plan is current and not exhausted
88 virtual bool IsActive() const; 92 virtual bool IsActive() const;
89 93
90 // return a{sv} representation for D-Bus 94 // return a{sv} representation for D-Bus
91 virtual DBusDataPlan ToDBusFormat() const; 95 virtual DBusDataPlan ToDBusFormat() const;
92 96
93 // construct DataPlan from DictionaryValue 97 // construct DataPlan from DictionaryValue
94 static DataPlan* FromDictionaryValue(const DictionaryValue *value, 98 static DataPlan* FromDictionaryValue(const DictionaryValue *value,
95 const Policy *policy); 99 const Policy *policy);
96 100
97 // convert ISO 8601 time value to base::Time 101 // convert ISO 8601 time value to base::Time
98 // returns true on success and false on failure 102 // returns true on success and false on failure
99 // |time_out| must not be NULL and is set on a successful return 103 // |time_out| must not be NULL and is set on a successful return
100 static bool TimeFromIso8601(const std::string& time_8601, 104 static bool TimeFromIso8601(const std::string& time_8601,
101 base::Time *time_out, 105 base::Time *time_out,
102 bool zoneless_strings_are_local); 106 bool zoneless_strings_are_local);
103 107
104 // returns first active plan in |data_plans| 108 // returns first active plan in |data_plans|
105 // returns NULL if list is empty or contains no active plans 109 // returns NULL if list is empty or contains no active plans
106 static DataPlan* GetActivePlan(const DataPlanList& data_plans); 110 static DataPlan* GetActivePlan(const DataPlanList& data_plans);
107 111
112 // event handler for |service's| local byte counter on |device|
113 // updates active plans in |data_plans| based on the |rx_bytes| and
114 // |tx_bytes| values gathered during the most recent sample interval
115 // notifies |service_manager| if an active plan is completely consumed
116 // returns true if any plans were updated and false otherwise
117 // |data_plans|, |service|, |service_manager| and |device| must not be NULL
118 static bool OnByteCounterUpdate(DataPlanList *data_plans, Service *service,
119 ServiceManager *service_manager,
120 Device *device, uint64 rx_bytes,
121 uint64 tx_bytes);
122
108 private: 123 private:
109 // human-readable plan name 124 // human-readable plan name
110 const std::string name_; 125 const std::string name_;
111 126
112 // plan type 127 // plan type
113 const Type type_; 128 const Type type_;
114 129
115 // last update time (i.e., how fresh is plan data) 130 // last update time (i.e., how fresh is plan data)
116 // this refers to carrier API data, not local measurements 131 // this refers to carrier API data, not local measurements
117 base::Time update_time_; 132 base::Time update_time_;
118 133
119 // plan start time 134 // plan start time
120 const base::Time start_time_; 135 const base::Time start_time_;
121 136
122 // plan end time 137 // plan end time
123 const base::Time end_time_; 138 const base::Time end_time_;
124 139
125 // max bytes available during plan period 140 // max bytes available during plan period
126 // irrelevant for plans of type kTypeUnlimited 141 // irrelevant for plans of type kTypeUnlimited
127 const Bytes data_bytes_max_; 142 const ByteCount data_bytes_max_;
128 143
129 // bytes consumed so far during plan period 144 // bytes consumed so far during plan period
130 // this measurement comes from the carrier API 145 // this measurement comes from the carrier API
131 Bytes data_bytes_used_; 146 ByteCount data_bytes_used_;
132 147
133 // local measurement of bytes used since we received |data_bytes_used_| 148 // local measurement of bytes used since we received |data_bytes_used_|
134 // baseline from the carrier API 149 // baseline from the carrier API
135 Bytes local_bytes_used_; 150 ByteCount local_bytes_used_;
136 151
137 // our best estimate of total bytes used for this plan 152 // our best estimate of total bytes used for this plan
138 // carrier baseline (|data_bytes_used_|) + 153 // carrier baseline (|data_bytes_used_|) +
139 // locally measured traffic (|local_bytes_used_|) 154 // locally measured traffic (|local_bytes_used_|)
140 Bytes total_bytes_used_; 155 ByteCount total_bytes_used_;
141 156
142 // convert plan type enum value to string formatted for libcros 157 // convert plan type enum value to string formatted for libcros
143 const char* TypeToLibcrosString(Type type) const; 158 const char* TypeToLibcrosString(Type type) const;
144 159
145 // convert string formatted for Cros Usage API to plan type enum value 160 // convert string formatted for Cros Usage API to plan type enum value
146 // returns true on success and false on failure 161 // returns true on success and false on failure
147 // |type_out| must not be NULL and is set on a successful return 162 // |type_out| must not be NULL and is set on a successful return
148 static bool CrosUsageStringToType(const std::string& type_string, 163 static bool CrosUsageStringToType(const std::string& type_string,
149 Type *type_out); 164 Type *type_out);
150 165
151 // converts the value associated with |key| in |dict| to an int64 166 // converts the value associated with |key| in |dict| to an int64
152 // returns true on success and false on failure 167 // returns true on success and false on failure
153 // |out_value| must not be NULL and is set on a successful return 168 // |out_value| must not be NULL and is set on a successful return
154 static bool GetInt64FromDictionary(const DictionaryValue& dict, 169 static bool GetInt64FromDictionary(const DictionaryValue& dict,
155 const std::string& key, 170 const std::string& key,
156 int64* out_value); 171 int64* out_value);
157 172
158 DISALLOW_COPY_AND_ASSIGN(DataPlan); 173 DISALLOW_COPY_AND_ASSIGN(DataPlan);
159 }; 174 };
160 175
161 } // namespace cashew 176 } // namespace cashew
162 177
163 #endif // SRC_DATA_PLAN_H_ 178 #endif // SRC_DATA_PLAN_H_
OLDNEW
« no previous file with comments | « src/byte_counter.h ('k') | src/data_plan.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698