Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
39faae4
release/2.60.0
vlad-dargel Oct 25, 2024
fffbfc3
run API UTests in a single process + disable oss standalone big env f…
ArtemHoruzhenko Oct 25, 2024
59dbdf1
Merge pull request #4013 from RedisInsight/bugix/fix-tests
ArtemHoruzhenko Oct 25, 2024
eadb9fc
#RI-6170 - fix word pattern
rsergeenko Oct 25, 2024
1649e33
Merge pull request #4014 from RedisInsight/fe/bugfix/release/2.60.0
vlad-dargel Oct 25, 2024
ce4c454
RI-6249 change general chatbot endpoint for staging
kchepikava Oct 28, 2024
ab73eb8
RI-6248 fixed pub-sub styling
kchepikava Oct 29, 2024
73a57af
add in progress auth requests pool
ArtemHoruzhenko Oct 29, 2024
106e328
Merge pull request #4027 from RedisInsight/be/bugfix/handle-multiple-…
ArtemHoruzhenko Oct 29, 2024
63a0b57
#RI-6250 - fix form jumping
rsergeenko Oct 29, 2024
5458815
remove commented block
rsergeenko Oct 29, 2024
dbb0f51
Merge pull request #4028 from RedisInsight/fe/bugfix/release/2.60.0
rsergeenko Oct 29, 2024
dee7391
Merge pull request #4026 from RedisInsight/fe/bugfix/RI-6248-fix-pub-…
mariasergeenko Oct 29, 2024
7efef0e
Merge pull request #4020 from RedisInsight/fe/bugfix/RI-6249-general-…
mariasergeenko Oct 29, 2024
f152bf2
RI-6273 fix pubsub not saved when switching between pages
kchepikava Oct 29, 2024
962e141
add ft.aggregate to top list
mariasergeenko Oct 30, 2024
6fe59f1
Merge pull request #4029 from RedisInsight/fe/bugfix/RI-6273-fix-chan…
mariasergeenko Oct 30, 2024
2914484
Merge pull request #4031 from RedisInsight/feature/add-aggregate-to-s…
mariasergeenko Oct 30, 2024
10169fd
Merge pull request #4032 from RedisInsight/release/2.60.0
vlad-dargel Oct 30, 2024
7d67feb
#RI-6277 - fix incorrect highlighting
rsergeenko Oct 30, 2024
93687a0
add ft.aggregate to top list
mariasergeenko Oct 30, 2024
167f9b2
#RI-6277 - add current argument for check comment
rsergeenko Oct 30, 2024
f8ef3dd
Merge pull request #4035 from RedisInsight/e2e/bugfix/command_sorting
mariasergeenko Oct 30, 2024
84a398d
Revert "#RI-6277 - add current argument for check comment"
vlad-dargel Oct 30, 2024
643feb2
#RI-6277 - add current argument for check comment
rsergeenko Oct 30, 2024
298f42c
Merge pull request #4034 from RedisInsight/fe/bugfix/release/2.60.0
vlad-dargel Oct 30, 2024
eb0c6a8
Merge pull request #4037 from RedisInsight/release/2.60.0
vlad-dargel Oct 31, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/build/release-docker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
set -e

HELP="Args:
-v - Semver (2.58.0)
-v - Semver (2.60.0)
-d - Build image repository (Ex: -d redisinsight)
-r - Target repository (Ex: -r redis/redisinsight)
"
Expand Down
3 changes: 2 additions & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,8 @@ aliases:
- oss-st-5 # OSS Standalone v5
- oss-st-5-pass # OSS Standalone v5 with admin pass required
- oss-st-6 # OSS Standalone v6 and all modules
- oss-st-big # OSS Standalone v6 and all modules and predefined amount of data inside (~3-4M)
# TODO: Investigate why it randomly fails
# - oss-st-big # OSS Standalone v6 and all modules and predefined amount of data inside (~3-4M)
- mods-preview # OSS Standalone and all preview modules
- oss-st-6-tls # OSS Standalone v6 with TLS enabled
- oss-st-6-tls-auth # OSS Standalone v6 with TLS auth required
Expand Down
2 changes: 1 addition & 1 deletion .github/build/release-docker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
set -e

HELP="Args:
-v - Semver (2.58.0)
-v - Semver (2.60.0)
-d - Build image repository (Ex: -d redisinsight)
-r - Target repository (Ex: -r redis/redisinsight)
"
Expand Down
4 changes: 2 additions & 2 deletions redisinsight/api/config/default.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ export default {
migrateOldFolders: process.env.RI_MIGRATE_OLD_FOLDERS ? process.env.RI_MIGRATE_OLD_FOLDERS === 'true' : true,
autoBootstrap: process.env.RI_AUTO_BOOTSTRAP ? process.env.RI_AUTO_BOOTSTRAP === 'true' : true,
buildType: process.env.RI_BUILD_TYPE || 'DOCKER_ON_PREMISE',
appVersion: process.env.RI_APP_VERSION || '2.58.0',
appVersion: process.env.RI_APP_VERSION || '2.60.0',
requestTimeout: parseInt(process.env.RI_REQUEST_TIMEOUT, 10) || 25000,
excludeRoutes: [],
excludeAuthRoutes: [],
Expand Down Expand Up @@ -279,7 +279,7 @@ export default {
},
},
ai: {
convAiApiUrl: process.env.RI_AI_CONVAI_API_URL || 'https://staging.redis.io/convai/api',
convAiApiUrl: process.env.RI_AI_CONVAI_API_URL || 'https://staging.learn.redis.com/convai/api',
convAiToken: process.env.RI_AI_CONVAI_TOKEN,
querySocketUrl: process.env.RI_AI_QUERY_SOCKET_URL || 'https://app-sm.k8s-cloudapi.sm-qa.qa.redislabs.com',
querySocketPath: process.env.RI_AI_QUERY_SOCKET_PATH || '/api/v1/cloud-copilot-service/socket.io/',
Expand Down
2 changes: 1 addition & 1 deletion redisinsight/api/config/swagger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const SWAGGER_CONFIG: Omit<OpenAPIObject, 'paths'> = {
info: {
title: 'Redis Insight Backend API',
description: 'Redis Insight Backend API',
version: '2.58.0',
version: '2.60.0',
},
tags: [],
};
Expand Down
4 changes: 2 additions & 2 deletions redisinsight/api/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "redisinsight-api",
"version": "2.58.0",
"version": "2.60.0",
"description": "Redis Insight API",
"private": true,
"author": {
Expand Down Expand Up @@ -28,7 +28,7 @@
"start:prod": "cross-env NODE_ENV=production node dist/src/main",
"test": "cross-env NODE_ENV=test ./node_modules/.bin/jest -w 1",
"test:watch": "cross-env NODE_ENV=test jest --watch -w 1",
"test:cov": "cross-env NODE_ENV=test ./node_modules/.bin/jest --forceExit --coverage -w 4",
"test:cov": "cross-env NODE_ENV=test ./node_modules/.bin/jest --forceExit --coverage --runInBand",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand -w 1",
"test:e2e": "jest --config ./test/jest-e2e.json -w 1",
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js -d ./config/ormconfig.ts",
Expand Down
12 changes: 12 additions & 0 deletions redisinsight/api/src/modules/cloud/auth/cloud-auth.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ export class CloudAuthService {

private authRequests: Map<string, CloudAuthRequest> = new Map();

private inProgressRequests: Map<string, CloudAuthRequest> = new Map();

constructor(
private readonly sessionService: CloudSessionService,
private readonly googleIdpAuthStrategy: GoogleIdpCloudAuthStrategy,
Expand Down Expand Up @@ -185,6 +187,8 @@ export class CloudAuthService {
// delete authRequest on this step
// allow to redirect with authorization code only once
this.authRequests.delete(query.state);
// Track in progress auth requests to avoid errors when for some reason many we receive many the same calls
this.inProgressRequests.set(query.state, authRequest);

const tokens = await this.exchangeCode(authRequest, query.code);

Expand Down Expand Up @@ -297,4 +301,12 @@ export class CloudAuthService {
throw wrapHttpError(e);
}
}

isRequestInProgress(query) {
return !!this.inProgressRequests.has(query?.state);
}

finishInProgressRequest(query) {
this.inProgressRequests.delete(query?.state);
}
}
2 changes: 1 addition & 1 deletion redisinsight/desktop/src/lib/aboutPanel/aboutPanel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const ICON_PATH = app.isPackaged

export const AboutPanelOptions = {
applicationName: 'Redis Insight',
applicationVersion: `${app.getVersion() || '2.58.0'}${
applicationVersion: `${app.getVersion() || '2.60.0'}${
!config.isProduction ? `-dev-${process.getCreationTime()}` : ''
}`,
copyright: `Copyright © ${new Date().getFullYear()} Redis Ltd.`,
Expand Down
9 changes: 9 additions & 0 deletions redisinsight/desktop/src/lib/cloud/cloud-oauth.handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,22 @@ export const initCloudOauthHandlers = () => {
export const cloudOauthCallback = async (url: UrlWithParsedQuery) => {
try {
const authService: CloudAuthService = getBackendApp()?.get?.(CloudAuthService)

// Ignore xdg-open when the same request is being processed.
if (authService.isRequestInProgress(url.query)) {
return
}

const result = await authService.handleCallback(url.query)

if (result.status === CloudAuthStatus.Failed) {
const [currentWindow] = getWindows().values()

currentWindow?.webContents.send(IpcOnEvent.cloudOauthCallback, result)
}

// complete auth request processing
authService.finishInProgressRequest(url.query)
} catch (e) {
log.error(wrapErrorMessageSensitiveData(e as Error))
}
Expand Down
2 changes: 1 addition & 1 deletion redisinsight/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"appName": "Redis Insight",
"productName": "RedisInsight",
"private": true,
"version": "2.58.0",
"version": "2.60.0",
"description": "Redis Insight",
"main": "./dist/main/main.js",
"author": {
Expand Down
2 changes: 1 addition & 1 deletion redisinsight/ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "redisinsight",
"appName": "Redis Insight",
"productName": "RedisInsight",
"version": "2.58.0",
"version": "2.60.0",
"description": "Redis Insight",
"author": {
"name": "Redis Ltd.",
Expand Down
4 changes: 4 additions & 0 deletions redisinsight/ui/src/constants/monaco/monaco.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ export const defaultMonacoOptions: monacoEditor.editor.IStandaloneEditorConstruc
automaticLayout: true,
formatOnPaste: false,
glyphMargin: true,
bracketPairColorization: {
enabled: true,
independentColorPoolPerBracketType: true
},
stickyScroll: {
enabled: true,
defaultModel: 'indentationModel'
Expand Down
2 changes: 1 addition & 1 deletion redisinsight/ui/src/constants/monaco/monacoRedis.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { monaco as monacoEditor } from 'react-monaco-editor'

export const redisLanguageConfig: monacoEditor.languages.LanguageConfiguration = {
wordPattern: /(#?-?\d*\.\d\w*%?)|([@#!.:]?[\w-?]+%?)|[@#!.]/g,
wordPattern: /\w+\.?(\w?)+/g,
comments: {
lineComment: '//',
// blockComment: ['/*', '*/'],
Expand Down
6 changes: 2 additions & 4 deletions redisinsight/ui/src/constants/monaco/theme.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,14 @@ export const redisearchLightThemeRules = [
export const darkThemeRules = [
{ token: 'function', foreground: 'BFBC4E' },
...redisearchDarKThemeRules.map((rule) => ({
...rule,
token: `${rule.token}`
...rule
}))
]

export const lightThemeRules = [
{ token: 'function', foreground: '795E26' },
...redisearchLightThemeRules.map((rule) => ({
...rule,
token: `${rule.token}.redisearch`
...rule
}))
]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import RediStackLightMin from 'uiSrc/assets/img/modules/redistack/RediStackLight
import RediStackDarkLogo from 'uiSrc/assets/img/modules/redistack/RedisStackLogoDark.svg'
import RediStackLightLogo from 'uiSrc/assets/img/modules/redistack/RedisStackLogoLight.svg'
import CloudLinkIcon from 'uiSrc/assets/img/oauth/cloud_link.svg?react'
import { ShowChildByCondition } from 'uiSrc/components'
import DatabaseListModules from 'uiSrc/components/database-list-modules/DatabaseListModules'
import ItemList from 'uiSrc/components/item-list'
import { BrowserStorageItem, Pages, Theme } from 'uiSrc/constants'
Expand Down Expand Up @@ -68,7 +67,6 @@ const DatabasesListWrapper = ({ width, onEditInstance, editedInstance, onDeleteI
const [, forceRerender] = useState({})

const deletingIdRef = useRef('')
const isLoadingRef = useRef(false)

const closePopover = () => {
if (deletingIdRef.current) {
Expand All @@ -84,19 +82,14 @@ const DatabasesListWrapper = ({ width, onEditInstance, editedInstance, onDeleteI

useEffect(() => {
const editInstanceId = new URLSearchParams(search).get('editInstance')
if (editInstanceId && !instances.loading) {
if (editInstanceId && instances?.data?.length) {
const instance = instances.data.find((item: Instance) => item.id === editInstanceId)
if (instance) {
handleClickEditInstance(instance)
}
setTimeout(() => {
history.replace(Pages.home)
}, 1000)
}
}

isLoadingRef.current = instances.loading
forceRerender({})
}, [instances.loading, search])
}, [instances, search])

useEffect(() => {
closePopover()
Expand Down Expand Up @@ -235,32 +228,28 @@ const DatabasesListWrapper = ({ width, onEditInstance, editedInstance, onDeleteI
return (
<div role="presentation">
{newStatus && (
<ShowChildByCondition isShow={!isLoadingRef.current} innerClassName={styles.newStatusAnchor}>
<EuiToolTip content="New" position="top" anchorClassName={styles.newStatusAnchor}>
<div className={styles.newStatus} data-testid={`database-status-new-${id}`} />
</EuiToolTip>
</ShowChildByCondition>
<EuiToolTip content="New" position="top" anchorClassName={styles.newStatusAnchor}>
<div className={styles.newStatus} data-testid={`database-status-new-${id}`} />
</EuiToolTip>
)}
<ShowChildByCondition isShow={!isLoadingRef.current}>
<EuiToolTip
position="bottom"
title="Database Alias"
className={styles.tooltipColumnName}
content={`${formatLongName(name)} ${getDbIndex(db)}`}
<EuiToolTip
position="bottom"
title="Database Alias"
className={styles.tooltipColumnName}
content={`${formatLongName(name)} ${getDbIndex(db)}`}
>
<EuiText
className={styles.tooltipAnchorColumnName}
data-testid={`instance-name-${id}`}
onClick={(e: React.MouseEvent) => handleCheckConnectToInstance(e, instance)}
onKeyDown={(e: React.KeyboardEvent) => handleCheckConnectToInstance(e, instance)}
>
<EuiText
className={styles.tooltipAnchorColumnName}
data-testid={`instance-name-${id}`}
onClick={(e: React.MouseEvent) => handleCheckConnectToInstance(e, instance)}
onKeyDown={(e: React.KeyboardEvent) => handleCheckConnectToInstance(e, instance)}
>
<EuiTextColor className={cx(styles.tooltipColumnNameText, { [styles.withDb]: db })}>
{cellContent}
</EuiTextColor>
<EuiTextColor>{` ${getDbIndex(db)}`}</EuiTextColor>
</EuiText>
</EuiToolTip>
</ShowChildByCondition>
<EuiTextColor className={cx(styles.tooltipColumnNameText, { [styles.withDb]: db })}>
{cellContent}
</EuiTextColor>
<EuiTextColor>{` ${getDbIndex(db)}`}</EuiTextColor>
</EuiText>
</EuiToolTip>
</div>
)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ const MessagesList = (props: Props) => {
<div className={styles.channelAnchor}>{channel}</div>
</EuiToolTip>
</div>
<div className={styles.message} ref={rowRef}>{message}</div>
<div className={styles.message} ref={rowRef}><span>{message}</span></div>
</div>
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@
.time {
color: var(--defaultGreenColor);
width: 150px;
padding-right: 4px;
}

.channel {
color: var(--euiColorMediumShade);
width: 220px;
max-height: 26px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
Expand All @@ -29,12 +29,19 @@
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
display: inline-block;
vertical-align: middle;
}

.message {
width: calc(100% - 372px);
color: var(--htmlColor);
word-break: break-word;

span {
display: inline-block;
vertical-align: middle;
}
}

.header {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ import ClickableAppendInfo from './components/clickable-append-info'
import styles from './styles.module.scss'

const SubscriptionPanel = () => {
const { messages, isSubscribed, loading, count } = useSelector(pubSubSelector)
const { messages, isSubscribed, subscriptions, loading, count } = useSelector(pubSubSelector)

const dispatch = useDispatch()
const { theme } = useContext(ThemeContext)

const { instanceId = '' } = useParams<{ instanceId: string }>()

const [channels, setChannels] = useState(DEFAULT_SEARCH_MATCH)
const [channels, setChannels] = useState(subscriptions?.length ? subscriptions.map((sub) => sub.channel).join(' ') : DEFAULT_SEARCH_MATCH)

const toggleSubscribe = () => {
dispatch(toggleSubscribeTriggerPubSub(channels))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ const PatternsInfo = ({ channels }: PatternsInfoProps) => {
<EuiToolTip
anchorClassName={styles.appendIcon}
position="right"
title={<>{channels?.trim().split(' ').map((ch) => <p>{ch}</p>)}</>}
title={<>{channels?.trim().split(' ').map((ch) => <p key={`${ch}`}>{ch}</p>)}</>}
>
<EuiIcon
type="iInCircle"
Expand Down
Loading
Loading