Giter VIP home page Giter VIP logo

big-rig's Introduction

Big Rig

Big Rig is an experimental, proof-of-concept system for generating and parsing Chrome's trace files. It has a web app dashboard that will allow you to track performance statistics over time, as well as a CLI version for integrating with other parts of your build system.

Big Rig web app

Both the web app and CLI ingest trace files that can come from:

In this project there are two sub-items:

  1. A dashboard web app.
  2. An automated Chrome test runner.

There is also a CLI / node module for Big Rig, which you can find in its own repo.

Issues

There are many missing features, tests, and options that need adding to Big Rig. However, in the interests of launch early and iterate often (a grand tradition), the repo is here for all to see! Do feel free to file issues against it, though.

Roadmap

Mainly at this point it's to deprecate the python-based backend for the web app and replace it with the JS- /NodeJS-based one. This will provide some additional options on processing traces for one, and should allow for a more of a plugin-based solution.

Owner

Paul Lewis - @aerotwist.

License

Please see /LICENSE for more info.

Please note: this is not an official Google product.

big-rig's People

Contributors

paullewis avatar ta2edchimp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

big-rig's Issues

Remove ^ hats from dependencies

The hats in the dependencies of the test-runner are installing an incompatible version of selenium-webdriver that has this error:

  return (new webdriver.WebDriver.Logs(browser))
          ^

TypeError: webdriver.WebDriver.Logs is not a function
    at Object.getTrace (/Users/bnolan/Work/runner/big-rig/test-runner/driver.js:88:11)
    at Object.<anonymous> (/Users/bnolan/Work/runner/big-rig/test-runner/runner.js:117:8)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)
    at startup (node.js:139:18)
    at node.js:974:3```

 If you remove the hats and `npm install` it works again.

Error processing the file (big file)

Cli works fine but webapp keeps throwing Error processing the file.
The timeline.json file is 12.8mb. When i upload aerotwist.json it works fine. Probably because the file it soo big?

Multiple tabs (trace process) found.

The getting started guide indicates that only one tab may be open or Big Rig will fail to identify the correct tab to analyze. Therefore, I closed Chrome completely, restarted it, then went to the page I wanted to test. I saved the timeline data and imported into Big Rig web app.

After importing the activity log shows 0 actions imported and the following status: Multiple tabs (trace process) found.

Alternatives

Just stumbled upon this project and it's just what I'm looking for! It looks amazing! But looking at the "Pulse" of this project, it looks like it's unmaintained :( Have development moved to another place? In case the project is completely abandoned, do similar alternatives exist?

Thanks in advance!

Internal deployments for Web UI?

We're interested in exploring big-rig as an internal tool behind our firewall, for testing dev & QA environments that are not exposed to the public internet.

Any plans to support deploying the Web UI on internal company-owned servers, instead of Google App engine (which I'm not very familiar with, but I assume locks you into their public cloud?)

Thanks!

Invalid format string

Hi Paul,

When I upload a trace it doesn't show me any results, just the same 'Upload a trace for this action' message. If I then go back to the project I get the following:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1535, in __call__
    rv = self.handle_exception(request, response, e)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "C:\Development\Tools\big-rig-master\app\dist\handlers\project.py", line 238, in get
    self.response.write(template.render(data))
  File "C:\Program Files (x86)\Google\google_appengine\lib\jinja2-2.6\jinja2\environment.py", line 894, in render
    return self.environment.handle_exception(exc_info, True)
  File "C:\Development\Tools\big-rig-master\app\dist\handlers\..\templates\project\action.html", line 82, in top-level template code
    {{ log.date.strftime('%b %e, %r') }}
ValueError: Invalid format string

Ouch! I am currently running on Windows 10 Chrome 46.0.2490.86 m

Thanks!

Remove --file

I have been using bigrig a lot lately. I have created a custom alias (alias br="bigrig --file") because I got tired of typing --file all the time when all I do is pretty print a file.

What is your opinion on dropping the whole --file argument and just assume the first argument is the file path? Most cli tools have that (for example mkdir: it's mkdir [folder], not mkdir --directory [folder])

Let me know what you think!

First paint is always 0

I'm not sure if this is an issue with bigrigrunner or the bigrig cli tool, but when analyzing the test results, the time to first paint is always 0ms. I'm using the latest version at HEAD (d08ffaa)

Repro:

> bigrigrunner -u http://www.google.com/analytics -s ".footer-lower" -t load | bigrig
[{"start":0,"end":2834.352000117302,"duration":2834.352000117302,"parseHTML":8.864999999999919,"javaScript":226.60300000000018,"styles":83.74599999999982,"updateLayerTree":7.65,"layout":67.83800000000002,"paint":6.620000000000001,"raster":60.55400000000002,"composite":0.288000000000153,"extendedInfo":{"domContentLoaded":1258.795000076294,"loadTime":1803.8500000238419,"firstPaint":0,"javaScript":{"www.google.com":10.734000000000052,"www.gstatic.com":21.364999999999988,"ajax.googleapis.com":111.30799999999998,"www.googletagmanager.com":24.01400000000009,"www.google-analytics.com":42.39600000000013,"www.googleapis.com":0.235}},"title":"Load","type":"Load"}]

Parameterize runner to use custom test

I wondered if there were plans to build in support to run custom tests? I was considering forking the project to add my own tests (by tests I mean modules that would run instead of "scroll" or "load") but I think its fairly simple to extend the project to accept modules via the CLI so wondered if that was something you'd planned in, or for which you'd accept a PR?

I was thinking of something like either extending the "test" flag to accept a path to a module, instead of just the names of the existing ones, or else a separate flag. Either way that would then replace the testPath variable that ends up being passed into flow via the steps array - something like that? Sorry if I've missed this and it already exists BTW!

Thanks!

Deploying to GAE, seeing NeedIndexError: no matching index found.

I deployed my big-rig instance to GAE but found that after I add a project, as soon as I click on the project's name I get this error (giant stack trace below). Being a total GAE newb I think it's telling me to get datastore, which I enabled in the console, but I'm not sure where to give big-rig my API keys.

Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1535, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~poly-rig/1.388738468218734710/handlers/project.py", line 238, in get
    self.response.write(template.render(data))
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/jinja2-2.6/jinja2/environment.py", line 894, in render
    return self.environment.handle_exception(exc_info, True)
  File "/base/data/home/apps/s~poly-rig/1.388738468218734710/handlers/../templates/project/action.html", line 31, in top-level template code
    {% if actions.count() == 0 %}
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/utils.py", line 142, in positional_wrapper
    return wrapped(*args, **kwds)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/query.py", line 1256, in count
    return self.count_async(limit, **q_options).get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 326, in get_result
    self.check_success()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 369, in _help_tasklet_along
    value = gen.throw(exc.__class__, exc, tb)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/query.py", line 1299, in _count_async
    batch = yield rpc
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 455, in _on_rpc_completion
    result = rpc.get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result
    return self.__get_result_hook(self)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_query.py", line 2922, in __query_result_hook
    yaml_index=yaml, xml_index=xml)
NeedIndexError: no matching index found.
The suggested index for this query is:
- kind: Action
  ancestor: yes
  properties:
  - name: name

[Documentation] big-rig UI Installation to Google App Engine unclear

Perhaps this is due to my lack of experience in Google App Engine, but the installation instructions for the UI portion of this project are unclear. (https://github.com/GoogleChrome/big-rig/tree/master/app#installation).
Specifically, step 5, which somehow links the big-rig repo to Google App Engine, is where I am stuck. There are no directions as to how to link the dist/ folder to the Google App Engine, whether that happens via command line, via the Google App Engine front-end UI, or otherwise.

If this is simply a case of "read all the documentation & watch all the videos on GAE, then you will understand", then that is a fair point, but I feel that some breadcrumbs to get people started would be helpful.

Install CLI to PATH so it can be used globally

Avoids needing to node index.js for generic CLI use.

A lot of packages have one or more executable files that they'd like to install into the PATH. npm makes this pretty easy. To use this, supply a bin field in your package.json which is a map of command name to local file name. On install, npm will symlink that file into prefix/bin for global installs, or ./node_modules/.bin/ for local installs. e.g { "bin" : { "bigrig" : "./cli.js" } }

So, when you install bigrig, it'll create a symlink from the cli.js script to /usr/local/bin/bigrig.

Folks can then do bigrig /path/to/trace.json

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.