Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Feel free to open an issue if you have a question that is not answered in the Wiki
We're trying out chat using Gitter Chat. I'll try to be in there whenever I'm at my computer.
If you've come here from Garb, welcome! There are a few changes from Garb, so you'll want to check out:
If you're not able to upgrade quite yet, Garb has been maintained https://github.com/Sija/garb
Get an OAuth2 Access Token from Google, Read about OAuth2
access_token = OAuth2 Access Token # from Google
Create a New User with the Access Token
user = Legato::User.new(access_token)
List the Accounts and Profiles of the first Account
user.accounts
user.accounts.first.profiles
List all the Profiles the User has Access to
user.profiles
Get a Profile
profile = user.profiles.first
The Profile Carries the User
profile.user == user #=> true
The profile can also lookup its "parent" Web Property
profile.web_property
class Exit
extend Legato::Model
metrics :exits, :pageviews
dimensions :page_path, :operating_system, :browser
end
profile.exit #=> returns a Legato::Query
profile.exit.each {} #=> any enumerable kicks off the request to GA
http://code.google.com/apis/analytics/docs/gdata/dimsmets/dimsmets.html
metrics :exits, :pageviews
dimensions :page_path, :operating_system, :browser
Create named filters to wrap query filters.
Here's what google has to say: http://code.google.com/apis/analytics/docs/gdata/v3/reference.html#filters
Inside of any Legato::Model
class, the method filter
is available (like metrics
and dimensions
).
Return entries with exits counts greater than or equal to 2000
filter(:high_exits) {gte(:exits, 2000)}
# or ...
filter :high_exits, &lambda {gte(:exits, 2000)}
Return entries with pageview metric less than or equal to 200
filter(:low_pageviews) {lte(:pageviews, 200)}
Filters with dimensions
filter(:for_browser) {|browser| matches(:browser, browser)}
Filters with OR
filter(:browsers) {|*browsers| browsers.map {|browser| matches(:browser, browser)}}
Pass the profile as the first or last parameter into any filter.
Exit.for_browser("Safari", profile)
Chain two filters.
Exit.high_exits.low_pageviews(profile)
Profile gets a method for each class extended by Legato::Model
Exit.results(profile) == profile.exit
We can chain off of that method, too.
profile.exit.high_exits.low_pageviews.by_pageviews
Chaining order doesn't matter. Profile can be given to any filter.
Exit.high_exits(profile).low_pageviews == Exit.low_pageviews(profile).high_exits
Be sure to pass the appropriate number of arguments matching the lambda for your filter.
For a filter defined like this:
filter(:browsers) {|*browsers| browsers.map {|browser| matches(:browser, browser)}}
We can use it like this, passing any number of arguments:
Exit.browsers("Firefox", "Safari", profile)
Google Analytics supports a significant number of filtering options.
Here is what we can do currently: (the operator is a method available in filters for the appropriate metric or dimension)
Operators on metrics (method => GA equivalent):
eql => '==',
not_eql => '!=',
gt => '>',
gte => '>=',
lt => '<',
lte => '<='
Operators on dimensions:
matches => '==',
does_not_match => '!=',
contains => '=~',
does_not_contain => '!~',
substring => '=@',
not_substring => '!@'
Your query can have a session-level segment, which works with filter expressions. It works like an advanced segment, except you don't have to create it beforehand, you can just specify it at query time.
Some of the numbers you'll get will be different from using a filter, since
the subset of visits matched happens before dimensions and metrics are
calculated (hover on the segment
parameter to see).
Some metrics and dimensions are not allowed for segments, see the API documentation for more details.
Note: Legato does not support Users vs Sessions, yet. The default will be sessions (the equivalent of the earlier, now removed, dynamic segments).
Return entries with exits counts greater than or equal to 2000
segment :high_exits do
gte(:exits, 2000)
end
Return entries with pageview metric less than or equal to 200
segment :low_pageviews do
lte(:pageviews, 200)
end
You can chain them
Exit.high_exits.low_pageviews(profile)
and call them directly on the profile
profile.exit.high_exits.low_pageviews
Legato::Management::Account.all(user)
Legato::Management::WebProperty.all(user)
Legato::Management::Profile.all(user)
Legato::Management::Goal.all(user)
https://developers.google.com/analytics/devguides/reporting/realtime/v3/ https://developers.google.com/analytics/devguides/reporting/realtime/dimsmets/
GA provides an endpoint to do basic reporting in near-realtime. Please read the above documentation to know which features (and dimentsion/metrics) are or are not available. It is also only available in beta so you must already have access.
Inside of Legato, you can simply add realtime
to your query (#results
returns a Query
instance), like this:
Exit.results(profile).realtime
The results you iterate over (with .each
, etc) will be from the realtime reporting API.
You can also call realtime
on your model to get a new Query
instance with realtime API set.
query = Exit.realtime
query.realtime? #=> true
query.tracking_scope #=> 'rt'
Assigning a quota_user
or user_ip
on a user instance will be used by management and query requests.
```ruby
user = Legato::User.new(access_token)
user.quota_user = 'some_unique_user_identifier'
# OR
user.user_ip = ip_address_from_a_web_user_or_something
```
(The MIT License)
Copyright (c) 2011-2014 Tony Pitale
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
FAQs
Unknown package
We found that legato demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.