Merge branch 'main' of github.com:openreplay/openreplay into custom-metrics-improvements
This commit is contained in:
commit
fd9f4bc0d3
35 changed files with 92 additions and 91 deletions
|
|
@ -36,8 +36,7 @@ def get_session2(projectId: int, sessionId: Union[int, str], context: schemas.Cu
|
||||||
include_fav_viewed=True, group_metadata=True)
|
include_fav_viewed=True, group_metadata=True)
|
||||||
if data is None:
|
if data is None:
|
||||||
return {"errors": ["session not found"]}
|
return {"errors": ["session not found"]}
|
||||||
if not data.get("live"):
|
sessions_favorite_viewed.view_session(project_id=projectId, user_id=context.user_id, session_id=sessionId)
|
||||||
sessions_favorite_viewed.view_session(project_id=projectId, user_id=context.user_id, session_id=sessionId)
|
|
||||||
return {
|
return {
|
||||||
'data': data
|
'data': data
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func getTimeoutContext() context.Context {
|
func getTimeoutContext() context.Context {
|
||||||
ctx, _ := context.WithTimeout(context.Background(), time.Duration(time.Second*10))
|
ctx, _ := context.WithTimeout(context.Background(), time.Duration(time.Second*30))
|
||||||
return ctx
|
return ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -156,7 +156,7 @@ def update(tenant_id, user_id, changes):
|
||||||
(SELECT role_id FROM roles WHERE tenant_id = %(tenant_id)s AND name != 'Owner' LIMIT 1)))""")
|
(SELECT role_id FROM roles WHERE tenant_id = %(tenant_id)s AND name != 'Owner' LIMIT 1)))""")
|
||||||
else:
|
else:
|
||||||
sub_query_users.append(f"{helper.key_to_snake_case(key)} = %({key})s")
|
sub_query_users.append(f"{helper.key_to_snake_case(key)} = %({key})s")
|
||||||
|
changes["role_id"] = changes.get("roleId", changes.get("role_id"))
|
||||||
with pg_client.PostgresClient() as cur:
|
with pg_client.PostgresClient() as cur:
|
||||||
if len(sub_query_users) > 0:
|
if len(sub_query_users) > 0:
|
||||||
cur.execute(
|
cur.execute(
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,10 @@ import Header from 'Components/Header/Header';
|
||||||
import FunnelDetails from 'Components/Funnels/FunnelDetails';
|
import FunnelDetails from 'Components/Funnels/FunnelDetails';
|
||||||
import FunnelIssueDetails from 'Components/Funnels/FunnelIssueDetails';
|
import FunnelIssueDetails from 'Components/Funnels/FunnelIssueDetails';
|
||||||
import { fetchList as fetchIntegrationVariables } from 'Duck/customField';
|
import { fetchList as fetchIntegrationVariables } from 'Duck/customField';
|
||||||
|
import { fetchList as fetchSiteList } from 'Duck/site';
|
||||||
|
import { fetchList as fetchAnnouncements } from 'Duck/announcements';
|
||||||
|
import { fetchList as fetchAlerts } from 'Duck/alerts';
|
||||||
|
import { fetchWatchdogStatus } from 'Duck/watchdogs';
|
||||||
|
|
||||||
import APIClient from './api_client';
|
import APIClient from './api_client';
|
||||||
import * as routes from './routes';
|
import * as routes from './routes';
|
||||||
|
|
@ -80,7 +84,14 @@ const ONBOARDING_REDIRECT_PATH = routes.onboarding(OB_DEFAULT_TAB);
|
||||||
onboarding: state.getIn([ 'user', 'onboarding' ])
|
onboarding: state.getIn([ 'user', 'onboarding' ])
|
||||||
};
|
};
|
||||||
}, {
|
}, {
|
||||||
fetchUserInfo, fetchTenants, setSessionPath, fetchIntegrationVariables
|
fetchUserInfo,
|
||||||
|
fetchTenants,
|
||||||
|
setSessionPath,
|
||||||
|
fetchIntegrationVariables,
|
||||||
|
fetchSiteList,
|
||||||
|
fetchAnnouncements,
|
||||||
|
fetchAlerts,
|
||||||
|
fetchWatchdogStatus,
|
||||||
})
|
})
|
||||||
class Router extends React.Component {
|
class Router extends React.Component {
|
||||||
state = {
|
state = {
|
||||||
|
|
@ -93,6 +104,14 @@ class Router extends React.Component {
|
||||||
props.fetchUserInfo().then(() => {
|
props.fetchUserInfo().then(() => {
|
||||||
props.fetchIntegrationVariables()
|
props.fetchIntegrationVariables()
|
||||||
}),
|
}),
|
||||||
|
props.fetchSiteList().then(() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
props.fetchAnnouncements();
|
||||||
|
props.fetchAlerts();
|
||||||
|
props.fetchWatchdogStatus();
|
||||||
|
}, 100);
|
||||||
|
}),
|
||||||
|
// props.fetchAnnouncements(),
|
||||||
])
|
])
|
||||||
// .then(() => this.onLoginLogout());
|
// .then(() => this.onLoginLogout());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,9 @@ class Notifications extends React.Component {
|
||||||
|
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
setTimeout(() => {
|
// setTimeout(() => {
|
||||||
props.fetchList();
|
// props.fetchList();
|
||||||
}, 1000);
|
// }, 1000);
|
||||||
|
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
props.fetchList();
|
props.fetchList();
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,6 @@ import { withRouter } from 'react-router-dom';
|
||||||
@withToggle('visible', 'toggleVisisble')
|
@withToggle('visible', 'toggleVisisble')
|
||||||
@withRouter
|
@withRouter
|
||||||
class Announcements extends React.Component {
|
class Announcements extends React.Component {
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
props.fetchList();
|
|
||||||
}
|
|
||||||
|
|
||||||
navigateToUrl = url => {
|
navigateToUrl = url => {
|
||||||
if (url) {
|
if (url) {
|
||||||
|
|
|
||||||
|
|
@ -4,14 +4,11 @@ import withPageTitle from 'HOCs/withPageTitle';
|
||||||
import {
|
import {
|
||||||
fetchFavoriteList as fetchFavoriteSessionList
|
fetchFavoriteList as fetchFavoriteSessionList
|
||||||
} from 'Duck/sessions';
|
} from 'Duck/sessions';
|
||||||
import { countries } from 'App/constants';
|
|
||||||
import { applyFilter, clearEvents, addAttribute } from 'Duck/filters';
|
import { applyFilter, clearEvents, addAttribute } from 'Duck/filters';
|
||||||
import { fetchList as fetchFunnelsList } from 'Duck/funnels';
|
import { fetchList as fetchFunnelsList } from 'Duck/funnels';
|
||||||
import { defaultFilters, preloadedFilters } from 'Types/filter';
|
|
||||||
import { KEYS } from 'Types/filter/customFilter';
|
import { KEYS } from 'Types/filter/customFilter';
|
||||||
import SessionList from './SessionList';
|
import SessionList from './SessionList';
|
||||||
import stl from './bugFinder.css';
|
import stl from './bugFinder.css';
|
||||||
import { fetchList as fetchSiteList } from 'Duck/site';
|
|
||||||
import withLocationHandlers from "HOCs/withLocationHandlers";
|
import withLocationHandlers from "HOCs/withLocationHandlers";
|
||||||
import { fetch as fetchFilterVariables } from 'Duck/sources';
|
import { fetch as fetchFilterVariables } from 'Duck/sources';
|
||||||
import { fetchSources } from 'Duck/customField';
|
import { fetchSources } from 'Duck/customField';
|
||||||
|
|
@ -68,7 +65,6 @@ const allowedQueryKeys = [
|
||||||
fetchSources,
|
fetchSources,
|
||||||
clearEvents,
|
clearEvents,
|
||||||
setActiveTab,
|
setActiveTab,
|
||||||
fetchSiteList,
|
|
||||||
fetchFunnelsList,
|
fetchFunnelsList,
|
||||||
resetFunnel,
|
resetFunnel,
|
||||||
resetFunnelFilters,
|
resetFunnelFilters,
|
||||||
|
|
@ -81,7 +77,6 @@ export default class BugFinder extends React.PureComponent {
|
||||||
state = {showRehydratePanel: false}
|
state = {showRehydratePanel: false}
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
// props.fetchFavoriteSessionList();
|
|
||||||
|
|
||||||
// TODO should cache the response
|
// TODO should cache the response
|
||||||
// props.fetchSources().then(() => {
|
// props.fetchSources().then(() => {
|
||||||
|
|
@ -115,29 +110,6 @@ export default class BugFinder extends React.PureComponent {
|
||||||
this.setState({ showRehydratePanel: !this.state.showRehydratePanel })
|
this.setState({ showRehydratePanel: !this.state.showRehydratePanel })
|
||||||
}
|
}
|
||||||
|
|
||||||
// fetchPreloadedFilters = () => {
|
|
||||||
// this.props.fetchFilterVariables('filterValues').then(function() {
|
|
||||||
// const { filterValues } = this.props;
|
|
||||||
// const keys = [
|
|
||||||
// {key: KEYS.USER_OS, label: 'OS'},
|
|
||||||
// {key: KEYS.USER_BROWSER, label: 'Browser'},
|
|
||||||
// {key: KEYS.USER_DEVICE, label: 'Device'},
|
|
||||||
// {key: KEYS.REFERRER, label: 'Referrer'},
|
|
||||||
// {key: KEYS.USER_COUNTRY, label: 'Country'},
|
|
||||||
// ]
|
|
||||||
// if (filterValues && filterValues.size != 0) {
|
|
||||||
// keys.forEach(({key, label}) => {
|
|
||||||
// const _keyFilters = filterValues.get(key)
|
|
||||||
// if (key === KEYS.USER_COUNTRY) {
|
|
||||||
// preloadedFilters.push(_keyFilters.map(item => ({label, type: key, key, value: item, actualValue: countries[item], isFilter: true})));
|
|
||||||
// } else {
|
|
||||||
// preloadedFilters.push(_keyFilters.map(item => ({label, type: key, key, value: item, isFilter: true})));
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
// }.bind(this));
|
|
||||||
// }
|
|
||||||
|
|
||||||
setActiveTab = tab => {
|
setActiveTab = tab => {
|
||||||
this.props.setActiveTab(tab);
|
this.props.setActiveTab(tab);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import DateRangeDropdown from 'Shared/DateRangeDropdown';
|
||||||
})
|
})
|
||||||
export default class DateRange extends React.PureComponent {
|
export default class DateRange extends React.PureComponent {
|
||||||
onDateChange = (e) => {
|
onDateChange = (e) => {
|
||||||
this.props.fetchFunnelsList(e.rangeValue)
|
// this.props.fetchFunnelsList(e.rangeValue)
|
||||||
this.props.applyFilter(e)
|
this.props.applyFilter(e)
|
||||||
}
|
}
|
||||||
render() {
|
render() {
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,9 @@ function SessionsMenu(props) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
// useEffect(() => {
|
||||||
fetchWatchdogStatus()
|
// fetchWatchdogStatus()
|
||||||
}, [])
|
// }, [])
|
||||||
|
|
||||||
const capturingAll = props.captureRate && props.captureRate.get('captureAll');
|
const capturingAll = props.captureRate && props.captureRate.get('captureAll');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import { withRouter } from 'react-router-dom';
|
||||||
import { Switch, Route, Redirect } from 'react-router';
|
import { Switch, Route, Redirect } from 'react-router';
|
||||||
import { CLIENT_TABS, client as clientRoute } from 'App/routes';
|
import { CLIENT_TABS, client as clientRoute } from 'App/routes';
|
||||||
import { fetchList as fetchMemberList } from 'Duck/member';
|
import { fetchList as fetchMemberList } from 'Duck/member';
|
||||||
import { fetchList as fetchSiteList } from 'Duck/site';
|
|
||||||
|
|
||||||
import ProfileSettings from './ProfileSettings';
|
import ProfileSettings from './ProfileSettings';
|
||||||
import Integrations from './Integrations';
|
import Integrations from './Integrations';
|
||||||
|
|
@ -21,7 +20,6 @@ import Roles from './Roles';
|
||||||
appearance: state.getIn([ 'user', 'account', 'appearance' ]),
|
appearance: state.getIn([ 'user', 'account', 'appearance' ]),
|
||||||
}), {
|
}), {
|
||||||
fetchMemberList,
|
fetchMemberList,
|
||||||
fetchSiteList,
|
|
||||||
})
|
})
|
||||||
@withRouter
|
@withRouter
|
||||||
export default class Client extends React.PureComponent {
|
export default class Client extends React.PureComponent {
|
||||||
|
|
|
||||||
|
|
@ -66,10 +66,6 @@ const Header = (props) => {
|
||||||
}
|
}
|
||||||
}, [showTrackingModal])
|
}, [showTrackingModal])
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
fetchSiteList()
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={ cn(styles.header, showTrackingModal ? styles.placeOnTop : '') }>
|
<div className={ cn(styles.header, showTrackingModal ? styles.placeOnTop : '') }>
|
||||||
<NavLink to={ withSiteId(SESSIONS_PATH, siteId) }>
|
<NavLink to={ withSiteId(SESSIONS_PATH, siteId) }>
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ import cn from 'classnames';
|
||||||
import NewSiteForm from '../Client/Sites/NewSiteForm';
|
import NewSiteForm from '../Client/Sites/NewSiteForm';
|
||||||
import { clearSearch } from 'Duck/search';
|
import { clearSearch } from 'Duck/search';
|
||||||
import { fetchList as fetchIntegrationVariables } from 'Duck/customField';
|
import { fetchList as fetchIntegrationVariables } from 'Duck/customField';
|
||||||
|
import { fetchList as fetchAlerts } from 'Duck/alerts';
|
||||||
|
import { fetchWatchdogStatus } from 'Duck/watchdogs';
|
||||||
|
|
||||||
@withRouter
|
@withRouter
|
||||||
@connect(state => ({
|
@connect(state => ({
|
||||||
|
|
@ -23,13 +25,15 @@ import { fetchList as fetchIntegrationVariables } from 'Duck/customField';
|
||||||
init,
|
init,
|
||||||
clearSearch,
|
clearSearch,
|
||||||
fetchIntegrationVariables,
|
fetchIntegrationVariables,
|
||||||
|
fetchAlerts,
|
||||||
|
fetchWatchdogStatus,
|
||||||
})
|
})
|
||||||
export default class SiteDropdown extends React.PureComponent {
|
export default class SiteDropdown extends React.PureComponent {
|
||||||
state = { showProductModal: false }
|
state = { showProductModal: false }
|
||||||
|
|
||||||
componentDidMount() {
|
// componentDidMount() {
|
||||||
this.props.fetchIntegrationVariables();
|
// this.props.fetchIntegrationVariables();
|
||||||
}
|
// }
|
||||||
|
|
||||||
closeModal = (e, newSite) => {
|
closeModal = (e, newSite) => {
|
||||||
this.setState({ showProductModal: false })
|
this.setState({ showProductModal: false })
|
||||||
|
|
@ -44,6 +48,8 @@ export default class SiteDropdown extends React.PureComponent {
|
||||||
this.props.setSiteId(siteId);
|
this.props.setSiteId(siteId);
|
||||||
this.props.clearSearch();
|
this.props.clearSearch();
|
||||||
this.props.fetchIntegrationVariables();
|
this.props.fetchIntegrationVariables();
|
||||||
|
this.props.fetchAlerts();
|
||||||
|
this.props.fetchWatchdogStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|
|
||||||
|
|
@ -16,11 +16,11 @@ const SESSIONS_ROUTE = sessionsRoute();
|
||||||
function Session({
|
function Session({
|
||||||
sessionId,
|
sessionId,
|
||||||
loading,
|
loading,
|
||||||
hasErrors,
|
hasErrors,
|
||||||
session,
|
session,
|
||||||
fetchSession,
|
fetchSession,
|
||||||
fetchSlackList,
|
fetchSlackList,
|
||||||
hasSessionsPath
|
hasSessionsPath
|
||||||
}) {
|
}) {
|
||||||
usePageTitle("OpenReplay Session Player");
|
usePageTitle("OpenReplay Session Player");
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
@ -51,7 +51,7 @@ function Session({
|
||||||
<Loader className="flex-1" loading={ loading || sessionId !== session.sessionId }>
|
<Loader className="flex-1" loading={ loading || sessionId !== session.sessionId }>
|
||||||
{ session.isIOS
|
{ session.isIOS
|
||||||
? <IOSPlayer session={session} />
|
? <IOSPlayer session={session} />
|
||||||
: (session.live && !hasSessionsPath ? <LivePlayer /> : <WebPlayer />)
|
: <WebPlayer />
|
||||||
}
|
}
|
||||||
</Loader>
|
</Loader>
|
||||||
</NoContent>
|
</NoContent>
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,15 @@ export default connect(state => ({
|
||||||
metadata: state.getIn([ 'sessions', 'current', 'metadata' ]),
|
metadata: state.getIn([ 'sessions', 'current', 'metadata' ]),
|
||||||
}))(function Metadata ({ metadata }) {
|
}))(function Metadata ({ metadata }) {
|
||||||
const [ visible, setVisible ] = useState(false);
|
const [ visible, setVisible ] = useState(false);
|
||||||
const toggle = useCallback(() => metadata.length > 0 && setVisible(v => !v), []);
|
const metaLenth = Object.keys(metadata).length;
|
||||||
|
const toggle = useCallback(() => metaLenth > 0 && setVisible(v => !v), []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Popup
|
<Popup
|
||||||
trigger={
|
trigger={
|
||||||
<IconButton
|
<IconButton
|
||||||
className={cn("w-full", { 'opacity-25' : metadata.length === 0 })}
|
className={cn("w-full", { 'opacity-25' : metaLenth === 0 })}
|
||||||
onClick={ toggle }
|
onClick={ toggle }
|
||||||
icon="id-card"
|
icon="id-card"
|
||||||
plain
|
plain
|
||||||
|
|
@ -33,17 +35,17 @@ export default connect(state => ({
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
on="click"
|
on="click"
|
||||||
disabled={metadata.length > 0}
|
disabled={metaLenth > 0}
|
||||||
size="tiny"
|
size="tiny"
|
||||||
inverted
|
inverted
|
||||||
position="top center"
|
position="top center"
|
||||||
/>
|
/>
|
||||||
{ visible &&
|
{ visible &&
|
||||||
<div className={ stl.modal } >
|
<div className={ stl.modal } >
|
||||||
<NoContent show={ metadata.size === 0 } size="small">
|
<NoContent show={ metaLenth === 0 } size="small">
|
||||||
{ metadata.map((i) => {
|
{ Object.keys(metadata).map((key) => {
|
||||||
const key = Object.keys(i)[0]
|
// const key = Object.keys(i)[0]
|
||||||
const value = i[key]
|
const value = metadata[key]
|
||||||
return <MetadataItem item={ { value, key } } key={ key } />
|
return <MetadataItem item={ { value, key } } key={ key } />
|
||||||
}) }
|
}) }
|
||||||
</NoContent>
|
</NoContent>
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ export default class extends React.PureComponent {
|
||||||
content={ open && <SessionList similarSessions={ similarSessions } loading={ loading } /> }
|
content={ open && <SessionList similarSessions={ similarSessions } loading={ loading } /> }
|
||||||
onClose={ open ? this.switchOpen : () => null }
|
onClose={ open ? this.switchOpen : () => null }
|
||||||
/>
|
/>
|
||||||
<div className={ cn("flex justify-between items-center p-3", stl.field) } >
|
<div className={ cn("flex justify-between items-center p-3 capitalize", stl.field) } >
|
||||||
<div>
|
<div>
|
||||||
<div className={ stl.key }>{ item.key }</div>
|
<div className={ stl.key }>{ item.key }</div>
|
||||||
<TextEllipsis
|
<TextEllipsis
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ const HeapTooltip = ({ active, payload}) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const NodesCountTooltip = ({ active, payload} ) => {
|
const NodesCountTooltip = ({ active, payload} ) => {
|
||||||
if (!active || payload.length === 0) return null;
|
if (!active || !payload || payload.length === 0) return null;
|
||||||
return (
|
return (
|
||||||
<div className={ stl.tooltipWrapper } >
|
<div className={ stl.tooltipWrapper } >
|
||||||
<p>
|
<p>
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,25 @@
|
||||||
import React from 'react'
|
import React, { useEffect } from 'react'
|
||||||
import { Icon } from 'UI'
|
import { Icon } from 'UI'
|
||||||
import { connect } from 'react-redux'
|
import { connect } from 'react-redux'
|
||||||
import { withRouter } from 'react-router-dom';
|
import { withRouter } from 'react-router-dom';
|
||||||
import { onboarding as onboardingRoute } from 'App/routes'
|
import { onboarding as onboardingRoute } from 'App/routes'
|
||||||
import { withSiteId } from 'App/routes';
|
import { withSiteId } from 'App/routes';
|
||||||
|
import { isGreaterOrEqualVersion } from 'App/utils'
|
||||||
|
|
||||||
const TrackerUpdateMessage= (props) => {
|
const TrackerUpdateMessage= (props) => {
|
||||||
// const { site } = props;
|
const [needUpdate, setNeedUpdate] = React.useState(false)
|
||||||
const { site, sites, match: { params: { siteId } } } = props;
|
const { sites, match: { params: { siteId } } } = props;
|
||||||
const activeSite = sites.find(s => s.id == siteId);
|
const activeSite = sites.find(s => s.id == siteId);
|
||||||
const hasSessions = !!activeSite && !activeSite.recorded;
|
|
||||||
const appVersionInt = parseInt(window.ENV.TRACKER_VERSION.split(".").join(""))
|
useEffect(() => {
|
||||||
const trackerVersionInt = site.trackerVersion ? parseInt(site.trackerVersion.split(".").join("")) : 0
|
if (!activeSite || !activeSite.trackerVersion) return;
|
||||||
const needUpdate = !hasSessions && appVersionInt > trackerVersionInt;
|
|
||||||
|
const isLatest = isGreaterOrEqualVersion(activeSite.trackerVersion, window.ENV.TRACKER_VERSION);
|
||||||
|
if (!isLatest && activeSite.recorded) {
|
||||||
|
setNeedUpdate(true)
|
||||||
|
}
|
||||||
|
}, [activeSite])
|
||||||
|
|
||||||
return needUpdate ? (
|
return needUpdate ? (
|
||||||
<>
|
<>
|
||||||
{(
|
{(
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ export default class AssistManager {
|
||||||
if (document.hidden && getState().calling === CallingState.NoCall) {
|
if (document.hidden && getState().calling === CallingState.NoCall) {
|
||||||
this.socket?.close()
|
this.socket?.close()
|
||||||
}
|
}
|
||||||
}, 15000)
|
}, 30000)
|
||||||
} else {
|
} else {
|
||||||
inactiveTimeout && clearTimeout(inactiveTimeout)
|
inactiveTimeout && clearTimeout(inactiveTimeout)
|
||||||
this.socket?.open()
|
this.socket?.open()
|
||||||
|
|
|
||||||
|
|
@ -227,3 +227,9 @@ export const iceServerConfigFromString = (str) => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const isGreaterOrEqualVersion = (version, compareTo) => {
|
||||||
|
const [major, minor, patch] = version.split("-")[0].split('.');
|
||||||
|
const [majorC, minorC, patchC] = compareTo.split("-")[0].split('.');
|
||||||
|
return (major > majorC) || (major === majorC && minor > minorC) || (major === majorC && minor === minorC && patch >= patchC);
|
||||||
|
}
|
||||||
|
|
@ -13,7 +13,7 @@ const oss = {
|
||||||
ORIGIN: () => 'window.location.origin',
|
ORIGIN: () => 'window.location.origin',
|
||||||
API_EDP: () => 'window.location.origin + "/api"',
|
API_EDP: () => 'window.location.origin + "/api"',
|
||||||
ASSETS_HOST: () => 'window.location.origin + "/assets"',
|
ASSETS_HOST: () => 'window.location.origin + "/assets"',
|
||||||
VERSION: '1.5.1',
|
VERSION: '1.5.2',
|
||||||
SOURCEMAP: true,
|
SOURCEMAP: true,
|
||||||
MINIO_ENDPOINT: process.env.MINIO_ENDPOINT,
|
MINIO_ENDPOINT: process.env.MINIO_ENDPOINT,
|
||||||
MINIO_PORT: process.env.MINIO_PORT,
|
MINIO_PORT: process.env.MINIO_PORT,
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ fatal()
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
version="v1.5.1"
|
version="v1.5.2"
|
||||||
usr=`whoami`
|
usr=`whoami`
|
||||||
|
|
||||||
# Installing k3s
|
# Installing k3s
|
||||||
|
|
|
||||||
|
|
@ -22,4 +22,4 @@ version: 0.1.0
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
# Ref: https://github.com/helm/helm/issues/7858#issuecomment-608114589
|
# Ref: https://github.com/helm/helm/issues/7858#issuecomment-608114589
|
||||||
AppVersion: "v1.5.1"
|
AppVersion: "v1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,4 @@ version: 0.1.0
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
AppVersion: "v1.5.1"
|
AppVersion: "v1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,4 @@ version: 0.1.0
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
AppVersion: "v1.5.1"
|
AppVersion: "v1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,4 @@ version: 0.1.0
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
AppVersion: "v1.5.1"
|
AppVersion: "v1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,4 @@ version: 0.1.0
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
AppVersion: "v1.5.1"
|
AppVersion: "v1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,4 @@ version: 0.1.0
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
AppVersion: "v1.5.1"
|
AppVersion: "v1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,4 @@ version: 0.1.0
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
AppVersion: "v1.5.1"
|
AppVersion: "v1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,4 @@ version: 0.1.0
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
AppVersion: "v1.5.1"
|
AppVersion: "v1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,4 @@ version: 0.1.0
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
AppVersion: "v1.5.1"
|
AppVersion: "v1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,4 @@ version: 0.1.0
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
AppVersion: "v1.5.1"
|
AppVersion: "v1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,4 @@ version: 0.1.0
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
AppVersion: "v1.5.1"
|
AppVersion: "v1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,4 @@ version: 0.1.0
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
AppVersion: "v1.5.1"
|
AppVersion: "v1.5.2"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
fromVersion: "v1.5.1"
|
fromVersion: "v1.5.2"
|
||||||
# Databases specific variables
|
# Databases specific variables
|
||||||
postgresql: &postgres
|
postgresql: &postgres
|
||||||
# For generating passwords
|
# For generating passwords
|
||||||
|
|
|
||||||
|
|
@ -161,7 +161,7 @@ module.exports = {
|
||||||
wsRouter,
|
wsRouter,
|
||||||
start: (server) => {
|
start: (server) => {
|
||||||
io = _io(server, {
|
io = _io(server, {
|
||||||
maxHttpBufferSize: 1e6,
|
maxHttpBufferSize: 5e6,
|
||||||
cors: {
|
cors: {
|
||||||
origin: "*",
|
origin: "*",
|
||||||
methods: ["GET", "POST", "PUT"]
|
methods: ["GET", "POST", "PUT"]
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue