Api v1.15.0 (#1670)

* fix(chalice): fixed assist auto-complete
* fix(chalice): fixed exp-sessions without timezone

(cherry picked from commit e46df53ddc)
This commit is contained in:
Kraiem Taha Yassine 2023-11-16 15:15:24 +01:00 committed by rjshrjndrn
parent e0186a73c6
commit 612e41583e
8 changed files with 11 additions and 46 deletions

View file

@ -57,8 +57,9 @@ OpenReplay is a session replay suite you can host yourself, that lets you see wh
- **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. - **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. - **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. - **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. - **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.
- **Funnels:** For surfacing the most impactful issues causing conversion and revenue loss. - **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. - **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. - **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. - **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.

View file

@ -30,7 +30,7 @@ def events_search(projectId: int, q: str,
return {"data": []} return {"data": []}
if live: if live:
return assist.autocomplete(project_id=projectId, q=q, return assist.autocomplete(project_id=projectId, q=q,
key=key if key is not None else type.value if type is not None else None) key=key if key is not None else type)
if type in [schemas.FetchFilterType._url]: if type in [schemas.FetchFilterType._url]:
type = schemas.EventType.request type = schemas.EventType.request
elif type in [schemas.GraphqlFilterType._name]: elif type in [schemas.GraphqlFilterType._name]:

View file

@ -94,3 +94,4 @@ rm -rf ./run-dev.sh
rm -rf ./run-alerts-dev.sh rm -rf ./run-alerts-dev.sh
rm -rf ./schemas/overrides.py rm -rf ./schemas/overrides.py
rm -rf ./schemas/schemas.py rm -rf ./schemas/schemas.py
rm -rf ./schemas/transformers_validators.py

View file

@ -113,7 +113,7 @@ class SessionModel(BaseModel):
projectId: int projectId: int
sessionId: str sessionId: str
startTs: int startTs: int
timezone: str timezone: Optional[str]
userAnonymousId: Optional[str] userAnonymousId: Optional[str]
userBrowser: str userBrowser: str
userCity: str userCity: str

View file

@ -1,3 +1,3 @@
argcomplete==3.0.8 argcomplete==3.0.8
apache-airflow==2.6.1 apache-airflow==2.6.2
airflow-code-editor==7.2.1 airflow-code-editor==7.2.1

View file

@ -13,6 +13,8 @@ import { observer } from 'mobx-react-lite';
import AutoplayToggle from 'Shared/AutoplayToggle'; import AutoplayToggle from 'Shared/AutoplayToggle';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import SessionTabs from 'Components/Session/Player/SharedComponents/SessionTabs' import SessionTabs from 'Components/Session/Player/SharedComponents/SessionTabs'
import { IFRAME } from 'App/constants/storageKeys';
import cn from 'classnames';
const localhostWarn = (project) => project + '_localhost_warn'; const localhostWarn = (project) => project + '_localhost_warn';
@ -22,6 +24,7 @@ function SubHeader(props) {
const [showWarningModal, setWarning] = React.useState(defaultLocalhostWarn); const [showWarningModal, setWarning] = React.useState(defaultLocalhostWarn);
const { player, store } = React.useContext(PlayerContext); const { player, store } = React.useContext(PlayerContext);
const { width, height, endTime, location: currentLocation = 'loading...', } = store.get(); const { width, height, endTime, location: currentLocation = 'loading...', } = store.get();
const hasIframe = localStorage.getItem(IFRAME) === "true";
const enabledIntegration = useMemo(() => { const enabledIntegration = useMemo(() => {
@ -104,7 +107,7 @@ function SubHeader(props) {
) : null} ) : null}
<SessionTabs /> <SessionTabs />
<div <div
className="ml-auto text-sm flex items-center color-gray-medium gap-2" className={cn("ml-auto text-sm flex items-center color-gray-medium gap-2", { 'opacity-50 pointer-events-none' : hasIframe })}
style={{ width: 'max-content' }} style={{ width: 'max-content' }}
> >
<Button icon="file-pdf" variant="text" onClick={showReportModal}> <Button icon="file-pdf" variant="text" onClick={showReportModal}>

View file

@ -1,39 +0,0 @@
#!/bin/bash
set -e
# This script won't work for aws, as it's black listed
echo -e "This script won't work for aws default domain names associated with public ips, as it's black listed in letsencrypt\nso if you're running on aws with default domain names, please press ctrl+c with in 5 seconds"
sleep 5
homedir=${HOME}
echo please enter your dns name :
read dns_name
echo please enter your email id:
read emai_id
ssh_ansible_user=$(whoami)
certbot_home=/etc/letsencrypt/live/$dns_name
#Check certbot installed or not
if [ $(which certbot) ]; then
echo "certbot is already installed"
else
sudo apt-get install -y certbot
fi
sudo certbot certonly --non-interactive --agree-tos -m $emai_id -d $dns_name --standalone
sudo cp $certbot_home/privkey.pem ${homedir}/site.key
sudo cp $certbot_home/fullchain.pem ${homedir}/site.crt
sudo chown -R $ssh_ansible_user:$ssh_ansible_user ${homedir}/site.key ${homedir}/site.crt
sudo chmod 775 ${homedir}/site.crt ${homedir}/site.key
echo -e "Please take a note of these, and fill it up in config file: \
\n\n dns_name: $dns_name \n
cert_path: ${homedir}/site.crt \n
key_path: ${homedir}/site.key\n
!!! please remove certs after the installation process. or keep it in a safe place."

View file

@ -50,7 +50,6 @@ spec:
value: "{{ .Values.global.s3.region }}" value: "{{ .Values.global.s3.region }}"
- name: QW_S3_ENDPOINT - name: QW_S3_ENDPOINT
value: '{{ .Values.global.s3.endpoint }}' value: '{{ .Values.global.s3.endpoint }}'
{{- end}}
- name: AWS_ACCESS_KEY_ID - name: AWS_ACCESS_KEY_ID
value: {{ .Values.global.s3.accessKey }} value: {{ .Values.global.s3.accessKey }}
- name: AWS_SECRET_ACCESS_KEY - name: AWS_SECRET_ACCESS_KEY