mirror of
https://github.com/oceanprotocol/market.git
synced 2024-12-02 05:57:29 +01:00
add more error handlers
This commit is contained in:
parent
afbc42068c
commit
cc47e48b4d
@ -1,11 +1,21 @@
|
|||||||
import { LoggerInstance } from '@oceanprotocol/lib'
|
import { LoggerInstance } from '@oceanprotocol/lib'
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
import isUrl from 'is-url-superb'
|
||||||
import { toast } from 'react-toastify'
|
import { toast } from 'react-toastify'
|
||||||
|
|
||||||
export async function getContainerChecksum(
|
export interface dockerContainerInfo {
|
||||||
|
exists: boolean
|
||||||
|
checksum: string
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getDockerHubImageChecksum(
|
||||||
image: string,
|
image: string,
|
||||||
tag: string
|
tag: string
|
||||||
): Promise<string> {
|
): Promise<dockerContainerInfo> {
|
||||||
|
const containerInfo: dockerContainerInfo = {
|
||||||
|
exists: false,
|
||||||
|
checksum: null
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
const response = await axios.post(
|
const response = await axios.post(
|
||||||
`https://dockerhub-proxy.oceanprotocol.com`,
|
`https://dockerhub-proxy.oceanprotocol.com`,
|
||||||
@ -20,16 +30,54 @@ export async function getContainerChecksum(
|
|||||||
response.data.status !== 'success'
|
response.data.status !== 'success'
|
||||||
) {
|
) {
|
||||||
toast.error(
|
toast.error(
|
||||||
'Could not fetch docker hub image info. Please input the container checksum manually'
|
'Could not fetch docker hub image info. Please check container image and tag and try again'
|
||||||
)
|
)
|
||||||
return null
|
return containerInfo
|
||||||
}
|
}
|
||||||
return response.data.result.checksum
|
containerInfo.exists = true
|
||||||
|
containerInfo.checksum = response.data.result.checksum
|
||||||
|
return containerInfo
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
LoggerInstance.error(error.message)
|
LoggerInstance.error(error.message)
|
||||||
toast.error(
|
toast.error(
|
||||||
'Could not fetch docker hub image info. Please input the container checksum manually'
|
'Could not fetch docker hub image info. Please check container image and tag and try again'
|
||||||
)
|
)
|
||||||
return null
|
return containerInfo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function validateContainerImageUrl(
|
||||||
|
imageURL: string
|
||||||
|
): Promise<dockerContainerInfo> {
|
||||||
|
const containerInfo: dockerContainerInfo = {
|
||||||
|
exists: false,
|
||||||
|
checksum: null
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const response = await axios.head(imageURL)
|
||||||
|
if (!response || response.status !== 200) {
|
||||||
|
toast.error(
|
||||||
|
'Could not fetch docker image info. Please check URL and try again'
|
||||||
|
)
|
||||||
|
return containerInfo
|
||||||
|
}
|
||||||
|
containerInfo.exists = true
|
||||||
|
return containerInfo
|
||||||
|
} catch (error) {
|
||||||
|
LoggerInstance.error(error.message)
|
||||||
|
toast.error(
|
||||||
|
'Could not fetch docker image info. Please check URL and try again'
|
||||||
|
)
|
||||||
|
return containerInfo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getContainerChecksum(
|
||||||
|
dockerImage: string,
|
||||||
|
tag: string
|
||||||
|
): Promise<dockerContainerInfo> {
|
||||||
|
const isValid = isUrl(dockerImage)
|
||||||
|
? await validateContainerImageUrl(dockerImage)
|
||||||
|
: await getDockerHubImageChecksum(dockerImage, tag)
|
||||||
|
return isValid
|
||||||
|
}
|
||||||
|
@ -26,16 +26,21 @@ export default function ContainerInput(props: InputProps): ReactElement {
|
|||||||
const parsedContainerValue = container?.split(':')
|
const parsedContainerValue = container?.split(':')
|
||||||
const imageNname = parsedContainerValue?.slice(0, -1).join(':')
|
const imageNname = parsedContainerValue?.slice(0, -1).join(':')
|
||||||
const tag =
|
const tag =
|
||||||
parsedContainerValue.length > 1 ? parsedContainerValue?.at(-1) : ''
|
parsedContainerValue?.length > 1 ? parsedContainerValue?.at(-1) : ''
|
||||||
|
const containerInfo = await getContainerChecksum(imageNname, tag)
|
||||||
|
if (containerInfo.exists) {
|
||||||
setFieldValue('metadata.dockerImageCustom', imageNname)
|
setFieldValue('metadata.dockerImageCustom', imageNname)
|
||||||
setFieldValue('metadata.dockerImageCustomTag', tag)
|
setFieldValue('metadata.dockerImageCustomTag', tag)
|
||||||
const checksum = await getContainerChecksum(imageNname, tag)
|
setChecked(true)
|
||||||
if (checksum) {
|
if (containerInfo.checksum) {
|
||||||
setFieldValue('metadata.dockerImageCustomChecksum', checksum)
|
setFieldValue(
|
||||||
|
'metadata.dockerImageCustomChecksum',
|
||||||
|
containerInfo.checksum
|
||||||
|
)
|
||||||
helpersChecksum.setTouched(false)
|
helpersChecksum.setTouched(false)
|
||||||
setIsValid(true)
|
setIsValid(true)
|
||||||
}
|
}
|
||||||
setChecked(true)
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
setFieldError(`${field.name}[0].url`, error.message)
|
setFieldError(`${field.name}[0].url`, error.message)
|
||||||
LoggerInstance.error(error.message)
|
LoggerInstance.error(error.message)
|
||||||
|
@ -41,7 +41,9 @@ async function getAlgorithmContainerPreset(
|
|||||||
const preset = algorithmContainerPresets.find(
|
const preset = algorithmContainerPresets.find(
|
||||||
(preset) => `${preset.image}:${preset.tag}` === dockerImage
|
(preset) => `${preset.image}:${preset.tag}` === dockerImage
|
||||||
)
|
)
|
||||||
preset.checksum = await getContainerChecksum(preset.image, preset.tag)
|
preset.checksum = await (
|
||||||
|
await getContainerChecksum(preset.image, preset.tag)
|
||||||
|
).checksum
|
||||||
return preset
|
return preset
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user