popcorn :: PopTrackerBrowsers :: browser_count
Apply thequery
on TrackerRepo::count
popcorn :: PopTrackerBrowsers :: browser_queries
MongoMatch query used for each browser keypopcorn :: PopTrackerBrowsers :: browser_queries=
MongoMatch query used for each browser keypopcorn $ PopTrackerBrowsers :: SELF
Type of this instance, automatically specialized in every classpopcorn :: PopTrackerBrowsers :: browser_count
Apply thequery
on TrackerRepo::count
popcorn :: PopTrackerBrowsers :: browser_queries
MongoMatch query used for each browser keypopcorn :: PopTrackerBrowsers :: browser_queries=
MongoMatch query used for each browser keycore :: Object :: class_factory
Implementation used byget_class
to create the specific class.
popcorn :: TrackerHandler :: config=
Config used to access tracker dbpopcorn :: Handler :: defaultinit
popcorn :: TrackerHandler :: defaultinit
core :: Object :: defaultinit
popcorn :: Handler :: deserialize_body
Deserialize the request bodycore :: Object :: is_same_instance
Return true ifself
and other
are the same instance (i.e. same identity).
core :: Object :: is_same_serialized
Isself
the same as other
in a serialization context?
core :: Object :: is_same_type
Return true ifself
and other
have the same dynamic type.
popcorn :: TrackerHandler :: limit
Get thelimit
GET argument from req
core :: Object :: output_class_name
Display class name on stdout (debug only).popcorn :: Handler :: validate_body
Validate body input withvalidator
popcorn :: Handler :: validator
Validator used to check body inputpopcorn :: Handler :: validator=
Validator used to check body input
# Group and count entries by browser
class PopTrackerBrowsers
super TrackerHandler
# MongoMatch query used for each browser key
#
# Because parsing user agent string is a pain in the nit, we go lazy on this
# one. We associate each broswer key like `Chromium` to the query that allows
# us to count the number of visits.
var browser_queries: HashMap[String, MongoMatch] do
var map = new HashMap[String, MongoMatch]
map["Chromium"] = (new MongoMatch).regex("user_agent", "Chromium")
map["Edge"] = (new MongoMatch).regex("user_agent", "Edge")
map["Firefox"] = (new MongoMatch).regex("user_agent", "Firefox")
map["IE"] = (new MongoMatch).regex("user_agent", "(MSIE)|(Trident)")
map["Netscape"] = (new MongoMatch).regex("user_agent", "Netscape")
map["Opera"] = (new MongoMatch).regex("user_agent", "Opera")
map["Safari"] = (new MongoMatch).land(null, [
(new MongoMatch).regex("user_agent", "Safari"),
(new MongoMatch).regex("user_agent", "^((?!Chrome).)*$")])
map["Chrome"] = (new MongoMatch).land(null, [
(new MongoMatch).regex("user_agent", "Chrome"),
(new MongoMatch).regex("user_agent", "^((?!Edge).)*$")])
return map
end
# Apply the `query` on `TrackerRepo::count`
fun browser_count(query: MongoMatch): Int do return config.tracker_logs.count(query)
redef fun get(req, res) do
var browsers = new Array[BrowserCount]
for browser, query in self.browser_queries do
var count = new BrowserCount(browser, browser_count(query))
if count.count > 0 then browsers.add count
end
var sum = 0
for browser in browsers do sum += browser.count
var other = config.tracker_logs.count - sum
if other > 0 then browsers.add new BrowserCount("Other", other)
default_comparator.sort(browsers)
res.json new JsonArray.from(browsers)
end
end
lib/popcorn/pop_tracker.nit:125,1--168,3