Giter Site home page Giter Site logo

openreplay / openreplay Goto Github PK

View Code? Open in Web Editor NEW
8.8K 74.0 470.0 48.43 MB

Session replay and analytics tool you can self-host. Ideal for reproducing issues, co-browsing with users and optimizing your product.

Home Page: https://openreplay.com

License: Other

JavaScript 14.23% HTML 1.47% CSS 2.13% TypeScript 36.86% Shell 1.00% Dockerfile 0.13% Go 6.84% Python 24.98% Smarty 0.83% PLpgSQL 4.19% Mustache 2.86% Jupyter Notebook 3.11% SCSS 0.01% Ruby 0.23% Swift 0.10% Makefile 0.03% Cython 0.90% Kotlin 0.01% Java 0.08% C 0.01%
session-replay react javascript analytics angular devtools feature-flags real-user-monitoring typescript vue

openreplay's Introduction

Français  |  Español  |  Русский  |  العربية

Session replay for developers

The most advanced session replay for building delightful web apps.

or.mp4

OpenReplay is a session replay suite you can host yourself, that lets you see what users do on your web and mobile apps, helping you troubleshoot issues faster.

  • Session replay. OpenReplay replays what users do, but not only. It also shows you what went under the hood, how your website or app behaves by capturing network activity, console logs, JS errors, store actions/state, page speed metrics, cpu/memory usage and much more. In addition to web applications, iOS and React Native apps are also supported (Android and Flutter are coming out soon).
  • Low footprint. With a ~26KB (.br) tracker that asynchronously sends minimal data for a very limited impact on performance.
  • Self-hosted. No more security compliance checks, 3rd-parties processing user data. Everything OpenReplay captures stays in your cloud for a complete control over your data.
  • Privacy controls. Fine-grained security features for sanitizing user data.
  • Easy deploy. With support of major public cloud providers (AWS, GCP, Azure, DigitalOcean).

Features

  • Session replay: Lets you relive your users' experience, see where they struggle and how it affects their behavior. Each session replay is automatically analyzed based on heuristics, for easy triage.
  • DevTools: It's like debugging in your own browser. OpenReplay provides you with the full context (network activity, JS errors, store actions/state and 40+ metrics) so you can instantly reproduce bugs and understand performance issues.
  • Assist: Helps you support your users by seeing their live screen and instantly hopping on call (WebRTC) with them without requiring any 3rd-party screen sharing software.
  • Feature flags: Enable or disable a feature, make gradual releases and A/B test all without redeploying your app.
  • Omni-search: Search and filter by almost any user action/criteria, session attribute or technical event, so you can answer any question. No instrumentation required.
  • Analytics: For surfacing the most impactful issues causing conversion and revenue loss.
  • Fine-grained privacy controls: Choose what to capture, what to obscure or what to ignore so user data doesn't even reach your servers.
  • Plugins oriented: Get to the root cause even faster by tracking application state (Redux, VueX, MobX, NgRx, Pinia and Zustand) and logging GraphQL queries (Apollo, Relay) and Fetch/Axios requests.
  • Integrations: Sync your backend logs with your session replays and see what happened front-to-back. OpenReplay supports Sentry, Datadog, CloudWatch, Stackdriver, Elastic and more.

Deployment Options

OpenReplay can be deployed anywhere. Follow our step-by-step guides for deploying it on major public clouds:

OpenReplay Cloud

For those who want to simply use OpenReplay as a service, sign up for a free account on our cloud offering.

Community Support

Please refer to the official OpenReplay documentation. That should help you troubleshoot common issues. For additional help, you can reach out to us on one of these channels:

  • Slack (Connect with our engineers and community)
  • GitHub (Bug and issue reports)
  • Twitter (Product updates, Great content)
  • YouTube (How-to tutorials, past Community Calls)
  • Website chat (Talk to us)

Contributing

We're always on the lookout for contributions to OpenReplay, and we're glad you're considering it! Not sure where to start? Look for open issues, preferably those marked as good first issues.

See our Contributing Guide for more details.

Also, feel free to join our Slack to ask questions, discuss ideas or connect with our contributors.

Roadmap

Check out our roadmap and keep an eye on what's coming next. You're free to submit new ideas and vote on features.

License

This monorepo uses several licenses. See LICENSE for more details.

openreplay's People

Contributors

aeolun avatar amirouche avatar animanmaster avatar champkeh avatar dgrah50 avatar eric-diffagency avatar estradino avatar hawbaker avatar icedmonk avatar jorgenevens avatar mauriciogarcias avatar nick-delirium avatar nogamenofun98 avatar ourvakan avatar pandacodes avatar rafaelrpinto avatar rinnegan72 avatar rjshrjndrn avatar roshbhatia avatar rosostolato avatar rubinsh avatar savinienbarbotaud avatar senyamur avatar shekarsiri avatar sudheer-salavadi avatar tahayk avatar tetreum avatar thundermiracle avatar vincentbean avatar zavorotynskiy 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  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

openreplay's Issues

RangeError: offset is out of bounds

Hi,

We're getting a lot of errors when the user uploads a big photo (8 mg). The error is on the following lines.

string(value) {
    const encoded = textEncoder.encode(value);
    const length = encoded.byteLength;
    this.uint(length);
    this.data.set(encoded, this.offset); --->>> RangeError: offset is out of bounds
    this.offset += length;
} 

This is the asayer url replicating the error -> Asayer

I'm gonna attach the image the user is uploading.[
RANGE OUT OF BOUND.jpg.zip
](url)

Alert-metric-value unexpected

The alert's metric value for performance.speed_index.average should be changed to performance.speed_index.average (instead of performance.speed_index) to match the one expected by the alets-worker and have the same format as the other metrics.

JWT expired if I hit login API twice

Hello, can someone help me

If I hit the login API twice
The old jwt expired

Is there any option or how can I overcome this issue

I am host on my own servers AWS

Also after fixing this issue
Can I reinstall app using same command

./install.sh

Redirection / Email url need to include the port number that set in the config

I got setup the openreplay with custom port config: http for 8080 port and https for 4433 port
although I got changed the value in the nginx folder, values.yaml there, and it indeed is working, but when it send out email or do redirect url (like I set force HTTPS redirection based on the doc guideline, and it redirect to normal 443 port)

Can make it read the port configuration and use in redirection and email url?

[Feature] Deploying openreplay on Heroku

Is there a possibility for a way on deploying openreplay on Heroku?

Thanks and congrats on releasing openreplay 1.0.0, the self hosted aspect is sorely needed for software like this.

Metrics view goes blank when navigating to resources section

I see this error in the console:

Error: fromMillis requires a numerical input, but received a object with value null
    at Function.e.fromMillis (luxon.js:6529)
    at o (date.js:50)
    at l.render (ResourceInfo.js:13)
    at ja (react-dom.production.min.js:182)
    at Fa (react-dom.production.min.js:181)
    at gs (react-dom.production.min.js:263)
    at cl (react-dom.production.min.js:246)
    at sl (react-dom.production.min.js:246)
    at Js (react-dom.production.min.js:239)
    at react-dom.production.min.js:123

Sorting by 'oldest' doesn't show you the oldest session.

Issue description

When attempting to sort your replays by oldest session, the sessions are sorted in ascending order which is good, however, they do not begin from the oldest session but rather from a random session.

Steps to reproduce the issue

  1. Visit the sessions
  2. Change sorting to 'oldest'

What's the expected result?

  • The sessions are sorted in ascending order from oldest to newest

What's the actual result?

  • The sessions are sorted in ascending order from a random session to the newest session

Skip inactivity, is skipping activity.

It appears there are issues with 'skip inactivity', Example here, skip inactivity skips the first part of this session, however if you play it back with skip inactivity unchecked, you will in fact see activity: https://i.gyazo.com/16f16f605221a7517554d4807f68f7a9.gif
The bot is native, it is not a third party plugin.
Notes from slack:
Mehdi Osman Ok, I get it. We'll look into it. It seems like the "click" action wasn't captured on that chat component.

Mehdi Osman 5 days ago Hey I couldn’t find the reason so far, so that requires a bit more investigation from the team. Could you please raise a GitHub issue so we can prioritize it?

Assets on S3

Hi,

I have Openreplay v1.3.0 installed on Google Cloud Kubernetes. I followed this https://docs.openreplay.com/configuration/recordings-storage to put the recording on S3, everything is working fine. I also would like to have the assets on S3 but despite the previous configuration, nothing is saved on S3. I found the CACHE_ASSETS in the http.yaml and changed it to true (I'm not sure it's written somewhere in the documentation?). I have the assets saved on S3 but the urls in the player are with the openreplay domain rather than S3. Something like https://hosted-openreplay.io/openreplay-assets-dev/https%213A%212F%212Fwebsite.io%212Ffonts%212FBitter.woff2.4

Am I missing some configuration ?

Thank you

Unknown issue types are being ignored

An IssueEvent with an unknown type will be ignored and not inserted in PostgreSQL. Currently all the issue types are restricted to the ones enlisted in the issue_type Enum type:

>> select enum_range(null::issue_type);

{click_rage,dead_click,excessive_scrolling,bad_request,missing_resource,memory,cpu,slow_resource,slow_page_load,crash,ml_cpu,ml_memory,ml_dead_click,ml_click_rage,ml_mouse_thrashing,ml_excessive_scrolling,ml_slow_resources,custom,js_exception,custom_event_error,js_error}

This might be not handy e.g. when one creates a new detector (like in heuristics), going to postgres to change the type - sounds like an excessive step. @tahayk, @PandaCodes, I would suggest to change the type of the column to text if it will not create any problems.

Password reset does not work

Screen Shot 2021-06-30 at 11 57 14 AM

Call to password reset api:

*/api/password/reset/2

fails with the following error:

  File "/usr/local/lib/python3.6/site-packages/chalice/app.py", line 1691, in _get_view_function_response
    response = view_function(**function_args)
  File "/work/chalicelib/blueprints/bp_core.py", line 510, in reset_password_handler
    return reset_password.step2(data)
  File "/work/chalicelib/core/reset_password.py", line 42, in step2
    "verifiedEmail": True})
  File "/work/chalicelib/core/users.py", line 130, in update
    {"user_id": user_id, **changes})
  File "/work/vendor/psycopg2/extras.py", line 251, in execute
    return super(RealDictCursor, self).execute(query, vars)
psycopg2.errors.UndefinedColumn: column "verified_email" of relation "users" does not exist
LINE 2:                             SET verified_email = true```

Feature request: Deploy as a single Docker image

The Plesk panel integrates support for executing single Docker images (without docker-composer). However, OpenRelay is not available yet in the docker repository. Would you mind compiling a self contained docker image? Thank you!

Unable to remove bookmark

Issue description

Attempting to remove bookmarked logs doesn't work

Steps to reproduce the issue

  1. Bookmark a log
  2. Attempt to remove the bookmark
  3. Refresh the page

What's the expected result?

The bookmark should be removed from the list of bookmarks

What's the actual result?

Initially the bookmark is removed, but on page refresh, it reappears again

Compile error when using trackerAssist

I was trying to update OpenReplay so I will have the ability to use the trackerAssist plugin.

After using

$ npm i @openreplay/tracker@latest
$ npm i @openreplay/tracker-assist

And after running the app I gut this error message on the console:

peerjs.min.js:1 Uncaught ReferenceError: parcelRequire is not defined
    at push.oLy0.parcelRequire.EgBh (peerjs.min.js:1)
    at Object.oLy0 (peerjs.min.js:1)
    at __webpack_require__ (bootstrap:79)
    at Module.sj1N (index.js:1)
    at __webpack_require__ (bootstrap:79)
    at Module.WO6z (index.ts:2)
    at __webpack_require__ (bootstrap:79)
    at Module.3LUQ (google-auth.service.ts:11)
    at __webpack_require__ (bootstrap:79)
    at Module.N+K7 (visa-type.enum.ts:35)

main.ts

import OpenReplay from '@openreplay/tracker';

platformBrowserDynamic().bootstrapModule(AppModule).then((ref) => {
  const tracker = new OpenReplay({
    projectKey: '********************'
  });
  tracker.start();

  ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production, registrationStrategy: 'registerImmediately' })
  ref.injector.get(ReplaySessionService).tracker = tracker;
}).catch(err => console.log(err));

replay-session.service.ts

import { Injectable } from '@angular/core';
import OpenReplay from '@openreplay/tracker';
import trackerAssist from '@openreplay/tracker-assist';

@Injectable({
  providedIn: 'root'
})
export class ReplaySessionService {
  tracker: OpenReplay

  sendErrorToReplaySession = (error: Error) => {
    this.tracker.handleError(error);
  }

  sendIssueToReplaySession = (key: string, payload: any) => {
    this.tracker.issue(key, payload);
  }

  assist = () => {
    this.tracker.use(trackerAssist({ confirmText: 'Live assistant'}));
  }
}

The project is running:

"webpack": "^4.46.0",
"@angular/compiler": "^10.2.5"

Styling issue within session display

Issue description

When viewing the clicks, input and navigation metadata of a session, if you filter it the results the container seems to not take up the height of the parent container resulting in the data getting clipped.

Steps to reproduce the issue

  1. View a session
  2. Display right panel with metadata
  3. Filter the metadata

What's the expected result?

  • The metadata is filtered and displays correctly

What's the actual result?

  • The metadata is filtered but the height is set incorrectly causing the data to be clipped.

Additional details / screenshot

Normal view

Screenshot from 2021-08-13 20-10-12

View when filtering (results clipped)

Screenshot from 2021-08-13 20-14-06

Containing div

Screenshot from 2021-08-13 20-14-41

Temp fix by removing 'position:relative'

Screenshot from 2021-08-13 20-15-11

Temp fix by removing 'overflow:hidden'

Screenshot from 2021-08-13 20-15-34

Temp fix by increasing height and removing max-height

Screenshot from 2021-08-13 20-23-41

Frontend crashing on selecting CSS tab inside Network

Uncaught TypeError: Cannot read property 'scrollToRow' of null
    at g.componentDidUpdate (TimeTable.js:139)
    at os (react-dom.production.min.js:212)
    at pl (react-dom.production.min.js:255)
    at t.unstable_runWithPriority (scheduler.production.min.js:19)
    at zi (react-dom.production.min.js:122)
    at fl (react-dom.production.min.js:248)
    at Js (react-dom.production.min.js:239)
    at react-dom.production.min.js:123
    at t.unstable_runWithPriority (scheduler.production.min.js:19)
    at zi (react-dom.production.min.js:122)

Recording stored twice

Hi,

I have Openreplay v1.3.0 installed on Google Cloud Kubernetes. I followed this https://docs.openreplay.com/configuration/recordings-storage to put the recording on S3, everything is working fine. I have the recording on S3 and the player calls the S3 server directly.
On my my kubernetes I have limited storage and I noticed that I still have all the recording on a persistent storage. Is there a cron which delete the recording saved on S3? Can I delete the recording files on kubernetes manually to not run out of space?

Thank you

Infinite scrolling and ability to select how many sessions to show

The Problem To Be Solved
When viewing all sessions you have to constantly click 'Load More' to view more sessions. You can only view 10 more sessions at a time which makes it quite difficult to view your last 100+ session for example.

Suggested Solution

  • Ability to select how many sessions results are shown on the page.
  • Infinite scrolling, automatically loading and showing more sessions when you get close to the bottom of the list.

Example:
https://codesandbox.io/s/439v8rmqm0

Implement "Auto Delete Rules" for emptying used storage after a certain amount of time

Problem:

OpenRerplay can quickly take a lot of space and there is no way to automatically clear past videos/events and one must take
manual action from the database to clear some storage.

Possible Solution:

Allow users to set a timeframe in which past events are automatically removed so that the system can always be up and running without needing manual intervention.

Unable to deploy using `kube-install.sh`

Super excited to try this! Looks like such great work 🔥

Though the docs say kube-setup.sh should be executed, there's no such file. I'm assuming it's kube-install.sh? Running that shows the following though I'm connected to the target cluster:

kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   [Redacted]   <none>        443/TCP   45m

sudo bash kube-install.sh

No config file found; using defaults
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
[WARNING]: While constructing a mapping from /home/ubuntu/openreplay/scripts/helm/roles/openreplay/tasks/install-dbs.yaml, line 57, column 7, found a duplicate dict key (retries). Using last defined
value only.
[WARNING]: While constructing a mapping from /home/ubuntu/openreplay/scripts/helm/roles/openreplay/tasks/install-dbs.yaml, line 57, column 7, found a duplicate dict key (delay). Using last defined value
only.
[WARNING]: While constructing a mapping from /home/ubuntu/openreplay/scripts/helm/roles/openreplay/tasks/install-dbs.yaml, line 57, column 7, found a duplicate dict key (register). Using last defined
value only.
[WARNING]: While constructing a mapping from /home/ubuntu/openreplay/scripts/helm/roles/openreplay/tasks/install-dbs.yaml, line 57, column 7, found a duplicate dict key (until). Using last defined value
only.

PLAY [localhost] *******************************************************************************************************************************************************************************************

TASK [openreplay : Checking mandatory variables] ***********************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Didn't find OpenReplay docker credentials."}

TASK [openreplay : Caught error] ***************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {
    "msg": [
        "Below variables are mandatory. Please make sure it is updated in vars.yaml",
        "kubeconfig_path",
        "docker_registry_username",
        "docker_registry_password",
        "docker_registry_url"
    ]
}

PLAY RECAP *************************************************************************************************************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=1    ignored=0

Session metadata not updating when changing session

Issue description

When you filter the metadata within a session and then visit a different session, the old metadata is shown on the new session until you refresh the page.

Steps to reproduce the issue

  1. Visit a session
  2. Filter the metadata
  3. Go back to the sessions view
  4. Select another session

What's the expected result?

  • The new session displays its current metadata

What's the actual result?

  • The new session displays the old metadata from the previous session

Additional details / screenshot

Display of session A

Screenshot from 2021-08-13 20-26-10

Display of session B (Notice metadata is the same as session A)

Screenshot from 2021-08-13 20-28-03

Display of session B after refresh (Notice metadata is now displaying the correct metadata for session B)

Screenshot from 2021-08-13 20-28-49

Metrics endpoint (/*/metrics) hang

When using the Open Source version of OpenReplay Postgres seems to run out of memory, in spite of processes never exceeding 10% of machine resources (32gb ram, 640gb ssd, 8 vcpu) when about 10k sessions are open generating a screen where all metrics are presented at 0.

Screen Shot 2021-06-28 at 10 41 06 PM

This happens after about a minute metrics loading waiting times, and for about 50% of the times the metrics screen is loaded. The other 50% of the times, after about a minute, the metrics screen i correctly loaded.

This is the stack trace:

Screen Shot 2021-06-28 at 10 06 17 PM

Viewing a stored session tries to connect as live session

Issue description

Attempting to view a stored session tries to initiate a live session connection and loads indefinitely

Steps to reproduce the issue

  1. Attempt to view stored sessions.
  2. Find a session of a user that appears both in the 'Assist' tab and the 'All' tab.
  3. Attempt to view the stored session in the 'All' tab

What's the expected result?

  • You view the stored session

What's the actual result?

  • It tries to initiate a live session connection and hangs indefinitely

Additional details / screenshot

The result of clicking on a stored session within the 'All' tab (Not inside 'Assist' tab)

Screenshot from 2021-08-13 20-37-12

SMTP - !! CANNOT SEND EMAIL, NO VALID SMTP CONFIGURATION FOUND

After installing OpenReplay in DigitalOcean (following the instructions), the dashboard works perfectly, but just couldn't get it to configure SMTP. Followed the instructions but emails are never sent. Documentation is lacking somewhere for sure. Same error as informed by another user on Slack.

I've change the chalice.yaml to proper configuration just as it's informed in documentation:

EMAIL_HOST: smtp.eu.mailgun.org
EMAIL_PORT: 587
EMAIL_USER: [email protected]
EMAIL_PASSWORD: password
EMAIL_USE_TLS: true
EMAIL_USE_SSL: false
EMAIL_SSL_KEY:
EMAIL_SSL_CERT:
EMAIL_FROM: [email protected]
SITE_URL: https://openreplay.mycompany.com

With my own Mailgun credentials, and I keep getting !! CANNOT SEND EMAIL, NO VALID SMTP CONFIGURATION FOUND

2021-06-14T06:17:01.116608320Z !! CANNOT SEND EMAIL, NO VALID SMTP CONFIGURATION FOUND
2021-06-14T06:17:01.116673401Z Execution time: 19 ms
2021-06-14T06:17:01.116856124Z 10.42.0.40 - - [14/Jun/2021 06:17:01] "POST /password/reset/1 HTTP/1.1" 200 -

It seems when it starts the server it can't find stage config, and it uses default config.json (I've also added my configuration in that file too. Still get the same error.

2021-06-14T06:26:40.270441604Z override config.json
2021-06-14T06:26:41.211010657Z /work/vendor/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.26.5) or chardet (3.0.4) doesn't match a supported version!
2021-06-14T06:26:41.211057058Z   RequestsDependencyWarning)
2021-06-14T06:26:41.243142723Z !! stage config file not found, using .chalice/config.json only
2021-06-14T06:26:41.570293802Z Connection pool created successfully

[Feature] Setting rules and tagging errors

The Problem To Be Solved

The errors tab does a great job of grouping errors together, however, if the error is the same but it appears in a different part of the code those two identical errors are not grouped (This is the expected behaviour). However, if you have an error that occurs many times but you can safely ignore it (such as a Network Error) you will soon have your entire errors page spammed with tiny errors which generate a lot of noise and make it hard to see the real errors.

Suggested Solution

Similar to LogRocket, a nice solution would be to allow rules that automatically categorise your errors. For example a rule could be:

IF Error.message === 'NetworkError' then Ignore error 

A UI which would allow you to set up rules like this would be great so that you could quickly ignore errors automatically that meet a criteria without having to do it manually and without them masking the real errors in your system.

Furthermore, the ability to give your errors an impact rating would also be great. For example, you could mark an error as 'High Impact', 'Medium Impact' or 'Low Impact' depending on the severity of the error. This would then allow you to quickly filter errors by impact allowing you to plan which error you will tackle next.

The ability to add impact to an error can be integrated with the ability to add rules as well. For example, other rules could be:

IF Error.message === 'cannot read property forEach of undefined' then mark error as high impact 
IF Error.message === 'toString is not a function' then mark error as low impact

Current behaviour

Screenshot from 2021-08-13 21-15-11

The Observer and Network errors are safe to ignore, they don't cause any negative impact on the end user, however the 'C.mask.replace is not a function' error does cause buggy behaviour. As you can see by the screen shot, the Network and Observer errors are spamming the entire view making the real issues difficult to spot and often hidden behind multiple 'Load More' clicks.

The ability to automatically create a rule that marks the Observer and Network errors as 'ignore' would greatly aid in making sure the more serious errors are quickly visible to the developer. Furthermore, the ability to then set a rule that marks the 'C.mask.replace is not a function' error as 'High Impact' would again go a long way into giving the lead developer concrete data they can use to decide what bug/s to work on next

Seeing "Session not found. Please check your data retention plan, or try another one" when trying to view a session

This log is from chalice after the app was unable to open a session:

2021-06-12T03:11:31.107236910Z parrot - ERROR - Caught exception for path /{projectId}/sessions2/{sessionId}
2021-06-12T03:11:31.107276079Z Traceback (most recent call last):
2021-06-12T03:11:31.107283619Z   File "/usr/local/lib/python3.6/site-packages/chalice/app.py", line 1691, in _get_view_function_response
2021-06-12T03:11:31.107289707Z     response = view_function(**function_args)
2021-06-12T03:11:31.107295409Z   File "/work/chalicelib/_overrides.py", line 51, in _user_handler
2021-06-12T03:11:31.107300224Z     return user_handler(**args)
2021-06-12T03:11:31.107305488Z   File "/work/chalicelib/blueprints/bp_core.py", line 33, in get_session2
2021-06-12T03:11:31.107313676Z     include_fav_viewed=True, group_metadata=True)
2021-06-12T03:11:31.107322273Z   File "/work/chalicelib/core/sessions.py", line 97, in get_by_id2_pg
2021-06-12T03:11:31.107334626Z     data['mobsUrl'] = sessions_mobs.get_web(sessionId=session_id)
2021-06-12T03:11:31.107340348Z   File "/work/chalicelib/core/sessions_mobs.py", line 12, in get_web
2021-06-12T03:11:31.107344883Z     ExpiresIn=100000
2021-06-12T03:11:31.107349842Z   File "/usr/local/lib/python3.6/site-packages/botocore/signers.py", line 600, in generate_presigned_url
2021-06-12T03:11:31.107354848Z     operation_name=operation_name)
2021-06-12T03:11:31.107359562Z   File "/usr/local/lib/python3.6/site-packages/botocore/signers.py", line 273, in generate_presigned_url
2021-06-12T03:11:31.107364373Z     'presign-url', expires_in, signing_name)
2021-06-12T03:11:31.107369373Z   File "/usr/local/lib/python3.6/site-packages/botocore/signers.py", line 162, in sign
2021-06-12T03:11:31.107375593Z     auth.add_auth(request)
2021-06-12T03:11:31.107397127Z   File "/usr/local/lib/python3.6/site-packages/botocore/auth.py", line 735, in add_auth
2021-06-12T03:11:31.107402667Z     raise NoCredentialsError
2021-06-12T03:11:31.107408498Z botocore.exceptions.NoCredentialsError: Unable to locate credentials

Live feed on Assist loads indefinitely

Issue description

When trying to connect to some live sessions through the Assist feature, the session(s) loads indefinitely. There are no errors shown in the console or in the networks tab.

Steps to reproduce the issue

  1. Go to Assist tab
  2. Try to connect to sessions until you find one that loads indefinitely

What's the expected result?

  • You connect to the live session

What's the actual result?

  • The session attempts to load but hangs forever

Additional details

A live session may work when accessed by one computer but not by another and vice versa. There seems to be no pattern behind what causes a live session to be successfully connected to or not. Some work for some computers others work for other computers.

tracker-assist fails to build on linux (ubuntu 18.04 using webpack)

when requiring @openreplay/tracker-assist I get the following error on webpack buid:

    ERROR in ./node_modules/@openreplay/tracker-assist/cjs/index.js
    Module not found: Error: Can't resolve './Confirm' in '/PositiveSimple/node_modules/@openreplay/tracker-assist/cjs'
     @ ./node_modules/@openreplay/tracker-assist/cjs/index.js 6:18-38
     @ ./src/index.js

The above error can be resolved by changing

import Confirm from './Confirm';

to:

import Confirm from './confirm';

(confirm instead of Confirm)

Update:
after forking the source code - I saw that there are two identical files: Confirm.ts and confirm.ts - I think we should just remove confirm.ts and retain Confirm.ts

Deployment & cli commands on MacOS throw an error

Running deployment script kube-install.sh or the cli throws the following error. Removing the -n option lets the scripts run but I'm not sure of the side-effects.

./openreplay-cli -h
getopt: illegal option -- n

Website doesn't include screenshots

I'd like to show people how this project looks like before they use it.
The website and the documentation currently lack screenshots.

Can you please provide them?

Conflicting option "-v" in sourcemap-uploader npm package

When installing the sourcimap-uploader npm module on a clean Ubuntu machine I get the error:

TypeError: argument "-v/--verbose": Conflicting option string(s): -v
image

Steps to reproduce:

  1. Run a clean ubuntu image: docker run -it --rm ubuntu
  2. Install node & npm: apt install nodejs npm
  3. cd in the home directory: cd /home
  4. Install sourcemap-uploader: npm i @openreplay/sourcemap-uploader
  5. cd in the bin folder: cd node_modules/.bin
  6. Run the upload command: ./sourcemap-uploader -k xxx -p yyy file -m ./dist/app.js.map -u https://mywebsite.com/app.min.js

Simple solution:
Changing the flag "-v" inside cli.js and renaming it (eg: "-v1") solves the issue.

install.sh : database files are incompatible with server

Hi,

I'm attempting to setup a local install using k3s to test out openreplay.

Currently I'm stuck with the following error which seems to be some outdated configuration?

postgresql 14:56:39.26 
postgresql 14:56:39.26 Welcome to the Bitnami postgresql container
postgresql 14:56:39.26 Subscribe to project updates by watching https://github.com/bitnami/bitnami-docker-postgresql
postgresql 14:56:39.27 Submit issues and feature requests at https://github.com/bitnami/bitnami-docker-postgresql/issues
postgresql 14:56:39.27 
postgresql 14:56:39.28 INFO  ==> ** Starting PostgreSQL setup **
postgresql 14:56:39.30 INFO  ==> Validating settings in POSTGRESQL_* env vars..
postgresql 14:56:39.30 INFO  ==> Loading custom pre-init scripts...
postgresql 14:56:39.31 INFO  ==> Initializing PostgreSQL database...
postgresql 14:56:39.32 INFO  ==> pg_hba.conf file not detected. Generating it...
postgresql 14:56:39.32 INFO  ==> Generating local authentication configuration
postgresql 14:56:39.33 INFO  ==> Deploying PostgreSQL with persisted data...
postgresql 14:56:39.34 INFO  ==> Configuring replication parameters
postgresql 14:56:39.36 INFO  ==> Configuring fsync
postgresql 14:56:39.40 INFO  ==> Loading custom scripts...
postgresql 14:56:39.40 INFO  ==> Enabling remote connections

postgresql 14:56:39.41 INFO  ==> ** PostgreSQL setup finished! **
postgresql 14:56:39.43 INFO  ==> ** Starting PostgreSQL **
2021-07-26 14:56:39.442 GMT [1] FATAL:  database files are incompatible with server
2021-07-26 14:56:39.442 GMT [1] DETAIL:  The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 13.3.

I assume the solution here is to either upgrade the default data set or run with version 11. Any advise on how to proceed in order to solve this?

Beacon Size Overflow on Assist

I am receiving the following error in console on the client side when trying to start an assist session.

OpenReplay: beacon size overflow

It then looks like the tracker tries to infinitely reconnect with no success (the follow message repeats infinitely).

OpenReplay tracker-assist: Connecting...
console.js:107 OpenReplay tracker-assist: connection opened.
index.js:235 OpenReplay tracking stopped.
console.js:107 OpenReplay tracker-assist peerID: FPjeYIbwJyvhrVVTTLHo-5209630993010946
index.js:200 OpenReplay tracking started.

I have attempted to increase the beacon size when starting the tracker, but no luck.

export const tracker = new Tracker({
  projectKey: xyz",
  ingestPoint: "https://xyz.com/ingest",
  ...(process.env.NODE_ENV === null || process.env.NODE_ENV === "development"
    ? { __DISABLE_SECURE_MODE: true }
    : {}),
  beaconSize: 10485760,
  onStart: ({ sessionID }) =>
    console.log(
      "******** OpenReplay tracker started with session: ",
      sessionID
    ),
});

This is being used on a rather sizeable React PWA, so I suspect that this may be related. Any thoughts on how to resolve this?

Ability to select logical operators when creating funnels

The Problem To Be Solved

When creating a funnel you are limited to filtering data using 'AND' logical operators.

userID is 1568541 AND input is 'example' AND page is /example/page

I think it would be very powerful if you could funnel your sessions using OR logical operators as well.

(userID is 1568541 OR UserID is 789456 )AND input is 'example' AND (page is /example/page OR page is /another-example/page)

Sessions are being recorded for minutes but nothing is being shown on replay.

We are having multiple sessions with recorded time and events, but the replay option shows no activity at all and it doesn't replay anything or neither display at least one screen. We are working in combo with sentry and we detect errors for those specific sessions, assayer has those errors too but no replay available due "inactivity"
Screen Shot 2021-06-09 at 11 31 03 AM

Openreplay down after changing the config

While trying to configure the SMTP server and when I executed this command ./openreplay-cli -i chalice the server is no longer responding and I have no clue what just happend. I also restored the chalice.yml but no luck. Where can I find technical details of how to start/stop openreplay?

Edge case assets loading bug: all assets prefixed with // are incorrectly treated as relative paths by OpenReplay.

Hello, we are trying out OpenReplay, and I believe we found an edge case bug that prevents sessions from loading assets (fonts, js, and css), therefore affecting session visualization

Namely, if within the page head, links are presented with a // prefix, the browser consider those links absolute, while openreplay considers them relative to main url, e.g.:

<link rel='stylesheet' href='//domain.com/wp-content/themes/assets/style.css type='text/css' media='all' />

We have a website where all tags (fonts, css, js) are prefixed with //, which breaks all session replays: The browser looks for them at https:// (absolute path), while openreplay looks for them at: domain// which breaks all assets loading

Is there a way to change this OpenReplay behavior and replicate browser behavior (i.e., assuming // stands for https:// , as browsers do, as opposed to https://domain.com/)?

Broken replay with 'non CSS MIME types are not allowed in strict mode' message in console.

This happens due to the fact that the requested CSS file was not cached correctly. Instead, there is a cached index.html, which causes MIME types inconsistency.
The reason of this is behaviour of some (at least one for this particular site) hosting systems, that require User-Agent header to be set, otherwise it returns default html page. - checked with curl.

TODO: add User-Agent header for the cacher's requests.

Docs are misleading in issue event

The docs are saying:

Technical Events
issue is used to send technical events, like errors, that may occur in your stack or other downstream systems. issue takes 2 parameters: name (string) and payload (JSON object).

Now if you look at the code you see this:

issue(key: string, payload: any): void {
    if (typeof key === 'string' && this.app !== null) {
      try {
        payload = JSON.stringify(payload);
      } catch (e) {
        return;
      }
      this.app.send(new CustomIssue(key, payload));
    }
  }

So the docs are saying parse it before you are sending:

this.tracker.issue('issue', JSON.stringify({}));

While it should be:

this.tracker.issue('issue', {});

JSON.stringify(JSON.stringify({})) // '"{}"'
JSON.stringify({}) // '{}'

The big question is why the type is "any" at all?

Link to docs: https://docs.openreplay.com/installation/custom-events

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.