Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
14 changes: 7 additions & 7 deletions tests/k6/generate-test-data.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ const config = {
environments: ['development', 'integration', 'tnr', 'uat', 'preproduction', 'production'],
priorities: { p1: 1, p2: 2, p3: 3, p4: 4, p5: 5 },
statuses: {
deployment: ['start', 'success', 'failure'],
deployment: ['planned', 'start', 'success', 'failure'],
incident: ['open', 'close'],
drift: ['open', 'done', 'warning'],
operation: ['start', 'success', 'failure', 'done'],
operation: ['planned', 'start', 'success', 'failure', 'done'],
rpa_usage: ['success', 'failure', 'warning'],
},
catalog: {
Expand Down Expand Up @@ -740,7 +740,7 @@ export default function () {
message: `Deployment of ${service} version ${version}`,
source: randomElement(['github_actions', 'gitlab_ci', 'argocd']),
type: 'deployment',
priority: env === 'production' ? randomElement(['p1', 'p2']) : randomElement(['p3', 'p4']),
priority: env === 'production' ? randomElement([1, 2]) : randomElement([3, 4]),
service: service,
status: status,
environment: env,
Expand Down Expand Up @@ -778,7 +778,7 @@ export default function () {
message: `Incident: ${incident} on ${service}`,
source: randomElement(['prometheus', 'datadog', 'manual']),
type: 'incident',
priority: env === 'production' ? 'p1' : 'p2',
priority: env === 'production' ? 1 : 2,
service: service,
status: status,
environment: env,
Expand Down Expand Up @@ -815,7 +815,7 @@ export default function () {
message: `Configuration drift: ${drift}`,
source: 'terraform',
type: 'drift',
priority: randomElement(['p2', 'p3']),
priority: randomElement([2, 3]),
service: service,
status: status,
environment: env,
Expand Down Expand Up @@ -851,7 +851,7 @@ export default function () {
message: `RPA process "${process}" executed`,
source: 'uipath',
type: 'rpa_usage',
priority: randomElement(['p3', 'p4']),
priority: randomElement([3, 4]),
service: service,
status: status,
environment: env,
Expand Down Expand Up @@ -889,7 +889,7 @@ export default function () {
message: `Operation: ${operation}`,
source: randomElement(['manual', 'scheduled', 'automated']),
type: 'operation',
priority: randomElement(['p2', 'p3']),
priority: randomElement([2, 3]),
service: service,
status: status,
environment: env,
Expand Down
7 changes: 6 additions & 1 deletion web/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,12 @@ import ThemeTest from './pages/ThemeTest'

function App() {
return (
<BrowserRouter>
<BrowserRouter
future={{
v7_startTransition: true,
v7_relativeSplatPath: true,
}}
>
<Routes>
<Route path="/" element={<Layout />}>
<Route index element={<Navigate to="/dashboard" replace />} />
Expand Down
34 changes: 17 additions & 17 deletions web/src/components/EventLinks.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import type { EventLinks as EventLinksType } from '../types/api'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faGithub, faSlack, faJira } from '@fortawesome/free-brands-svg-icons'
import { faRocket } from '@fortawesome/free-solid-svg-icons'
import { faGithub, faJira } from '@fortawesome/free-brands-svg-icons'
import { faRocket, faTicket, faExternalLink } from '@fortawesome/free-solid-svg-icons'
import { SlackIcon } from './icons/SlackIcon'
import { GrafanaIcon } from './icons/GrafanaIcon'
import { getJiraTicketUrl, getSlackMessageUrl, parseSlackId } from '../config'

interface EventLinksProps {
Expand All @@ -14,13 +16,7 @@ interface EventLinksProps {
export default function EventLinks({ links, slackId, className = '' }: EventLinksProps) {
const hasLinks = links?.pullRequestLink || links?.ticket || slackId

// Debug
console.log('EventLinks - links:', links)
console.log('EventLinks - ticket:', links?.ticket)
console.log('EventLinks - pullRequestLink:', links?.pullRequestLink)

if (!hasLinks) {
console.log('EventLinks - No links to display')
return null
}

Expand All @@ -35,7 +31,7 @@ export default function EventLinks({ links, slackId, className = '' }: EventLink
className="inline-flex items-center space-x-1 text-sm text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 transition-colors"
title={`Voir la Pull Request: ${links.pullRequestLink}`}
>
<FontAwesomeIcon icon={faGithub} className="w-4 h-4 text-gray-800 dark:text-gray-300" />
<FontAwesomeIcon icon={faGithub} className="w-4 h-4" />
<span>PR #{extractPRNumber(links.pullRequestLink)}</span>
</a>
)}
Expand All @@ -44,6 +40,10 @@ export default function EventLinks({ links, slackId, className = '' }: EventLink
{links?.ticket && (() => {
const ticketId = extractTicketId(links.ticket)
const ticketUrl = getJiraTicketUrl(links.ticket)
// Détecter si c'est un lien Jira/Atlassian
const isJiraLink = ticketUrl.toLowerCase().includes('atlassian') || ticketUrl.toLowerCase().includes('jira')
const icon = isJiraLink ? faJira : faTicket

return (
<a
href={ticketUrl}
Expand All @@ -52,7 +52,7 @@ export default function EventLinks({ links, slackId, className = '' }: EventLink
className="inline-flex items-center space-x-1 text-sm text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 transition-colors"
title={`View ticket: ${ticketId}`}
>
<FontAwesomeIcon icon={faJira} className="w-4 h-4 text-blue-600 dark:text-blue-400" />
<FontAwesomeIcon icon={icon} className="w-4 h-4 text-blue-600 dark:text-blue-400" />
<span>{ticketId}</span>
</a>
)
Expand All @@ -71,7 +71,7 @@ export default function EventLinks({ links, slackId, className = '' }: EventLink
className="inline-flex items-center space-x-1 text-sm text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 transition-colors"
title="View in Slack"
>
<FontAwesomeIcon icon={faSlack} className="w-4 h-4 text-purple-600 dark:text-purple-400" />
<SlackIcon className="w-4 h-4" />
<span>Slack</span>
</a>
)
Expand Down Expand Up @@ -134,20 +134,20 @@ export function SourceIcon({ source, className = 'w-4 h-4' }: SourceIconProps) {
const sourceLower = source.toLowerCase()

if (sourceLower.includes('tracker')) {
return <FontAwesomeIcon icon={faRocket} className={`${className} icon-gradient`} />
return <FontAwesomeIcon icon={faRocket} className={`${className} text-gray-900 dark:text-gray-100`} />
}

if (sourceLower.includes('slack')) {
return <FontAwesomeIcon icon={faSlack} className={`${className} text-purple-600 dark:text-purple-400`} />
return <SlackIcon className={className} />
}

if (sourceLower.includes('github')) {
return <FontAwesomeIcon icon={faGithub} className={`${className} text-gray-800 dark:text-gray-300`} />
return <FontAwesomeIcon icon={faGithub} className={className} />
}

if (sourceLower.includes('jira')) {
return <FontAwesomeIcon icon={faJira} className={`${className} text-blue-600 dark:text-blue-400`} />
if (sourceLower.includes('grafana')) {
return <GrafanaIcon className={className} />
}

return null
return <FontAwesomeIcon icon={faExternalLink} className={className} />
}
8 changes: 5 additions & 3 deletions web/src/components/StaticModeBanner.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,12 @@ import { getMetadata } from '../lib/staticApi'

export default function StaticModeBanner() {
const [lastUpdate, setLastUpdate] = useState<string>('')
const isStaticMode = import.meta.env.VITE_STATIC_MODE === 'true'

useEffect(() => {
// Only fetch metadata if we're in static mode
if (!isStaticMode) return

const fetchMetadata = async () => {
try {
const metadata = await getMetadata()
Expand All @@ -15,9 +19,7 @@ export default function StaticModeBanner() {
}
}
fetchMetadata()
}, [])

const isStaticMode = import.meta.env.VITE_STATIC_MODE === 'true'
}, [isStaticMode])

if (!isStaticMode) return null

Expand Down
2 changes: 1 addition & 1 deletion web/src/components/icons/GrafanaIcon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ interface GrafanaIconProps {
className?: string
}

export default function GrafanaIcon({ className = "w-4 h-4" }: GrafanaIconProps) {
export function GrafanaIcon({ className = "w-4 h-4" }: GrafanaIconProps) {
return (
<img
src="/grafana.svg"
Expand Down
2 changes: 1 addition & 1 deletion web/src/components/icons/KotlinIcon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ interface KotlinIconProps {
className?: string
}

export default function KotlinIcon({ className = "w-4 h-4" }: KotlinIconProps) {
export function KotlinIcon({ className = "w-4 h-4" }: KotlinIconProps) {
return (
<img
src="/kotlin.svg"
Expand Down
2 changes: 1 addition & 1 deletion web/src/components/icons/KubernetesIcon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ interface KubernetesIconProps {
className?: string
}

export default function KubernetesIcon({ className = "w-4 h-4" }: KubernetesIconProps) {
export function KubernetesIcon({ className = "w-4 h-4" }: KubernetesIconProps) {
return (
<img
src="/kubernetes.png"
Expand Down
2 changes: 1 addition & 1 deletion web/src/components/icons/SlackIcon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ interface SlackIconProps {
className?: string
}

export default function SlackIcon({ className = "w-4 h-4" }: SlackIconProps) {
export function SlackIcon({ className = "w-4 h-4" }: SlackIconProps) {
return (
<img
src="/slack.svg"
Expand Down
2 changes: 1 addition & 1 deletion web/src/components/icons/TerraformIcon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ interface TerraformIconProps {
className?: string
}

export default function TerraformIcon({ className = "w-4 h-4" }: TerraformIconProps) {
export function TerraformIcon({ className = "w-4 h-4" }: TerraformIconProps) {
return (
<img
src="/terraform.svg"
Expand Down
16 changes: 0 additions & 16 deletions web/src/lib/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ const isStaticMode = import.meta.env.VITE_STATIC_MODE === 'true'
// Configuration de l'URL de base de l'API
const getApiBaseUrl = () => {
const apiUrl = import.meta.env.VITE_API_BASE_URL || '/api/v1alpha1'
console.log('🔗 API Base URL:', apiUrl) // Debug temporaire
return apiUrl
}

Expand Down Expand Up @@ -200,8 +199,6 @@ const realCatalogApi = {
},

createOrUpdate: async (catalog: Catalog) => {
console.log('🌐 API: Sending catalog to backend:', JSON.stringify(catalog, null, 2))

// Convert to backend format (snake_case for dependencies, simple SLA)
// IMPORTANT: Exclude version fields - they are managed separately via updateVersions endpoint
const backendCatalog = {
Expand Down Expand Up @@ -273,10 +270,7 @@ const realCatalogApi = {
// They are managed via separate updateVersions endpoint
}

console.log('🔄 API: Converted for backend (no version fields):', JSON.stringify(backendCatalog, null, 2))

const { data } = await axiosInstance.put<{ catalog: any }>('/catalog', backendCatalog)
console.log('✅ API: Received response:', JSON.stringify(data, null, 2))

// Convert response back to frontend format
const frontendCatalog: Catalog = {
Expand Down Expand Up @@ -314,19 +308,14 @@ const realCatalogApi = {
},

updateVersions: async (name: string, versions: string[], latestVersion?: string, referenceVersion?: string) => {
console.log('🔧 API: Updating versions for service:', name, { versions, latestVersion, referenceVersion })

const requestData = {
name,
available_versions: versions,
latest_version: latestVersion,
reference_version: referenceVersion
}

console.log('📤 API: Sending version update:', JSON.stringify(requestData, null, 2))

const { data } = await axiosInstance.put<{ catalog: any }>(`/catalog/${name}/versions`, requestData)
console.log('✅ API: Version update response:', JSON.stringify(data, null, 2))

// Convert response back to frontend format
const frontendCatalog: Catalog = {
Expand Down Expand Up @@ -354,18 +343,13 @@ const realCatalogApi = {
},

updateDependencies: async (name: string, dependenciesIn: string[], dependenciesOut: string[]) => {
console.log('🔧 API: Updating dependencies for service:', name, { dependenciesIn, dependenciesOut })

const requestData = {
name,
dependencies_in: dependenciesIn,
dependencies_out: dependenciesOut
}

console.log('📤 API: Sending dependencies update:', JSON.stringify(requestData, null, 2))

const { data } = await axiosInstance.put<{ catalog: any }>(`/catalog/${name}/dependencies`, requestData)
console.log('✅ API: Dependencies update response:', JSON.stringify(data, null, 2))

// Convert response back to frontend format
const frontendCatalog: Catalog = {
Expand Down
8 changes: 0 additions & 8 deletions web/src/lib/eventUtils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,36 +9,28 @@ export const getEventTypeIcon = (type: EventType | string, className: string = '
// Normaliser le type en string lowercase
const typeStr = String(type).toLowerCase()

console.log('🔍 getEventTypeIcon:', type, '→', typeStr)

switch (typeStr) {
case 'deployment':
case '1':
console.log('✅ → ROCKET (Déploiement)')
return <FontAwesomeIcon icon={faRocket} className={`${finalClass} icon-gradient-blue`} />

case 'operation':
case '2':
console.log('✅ → WRENCH (Opération)')
return <FontAwesomeIcon icon={faWrench} className={`${finalClass} icon-gradient-purple`} />

case 'drift':
case '3':
console.log('✅ → CODE_BRANCH (Drift)')
return <FontAwesomeIcon icon={faCodeBranch} className={`${finalClass} icon-gradient-yellow`} />

case 'incident':
case '4':
console.log('✅ → FIRE (Incident)')
return <FontAwesomeIcon icon={faFire} className={`${finalClass} icon-gradient-red`} />

case 'rpa_usage':
case '5':
console.log('✅ → ROBOT (RPA Usage)')
return <FontAwesomeIcon icon={faRobot} className={`${finalClass} icon-gradient`} />

default:
console.warn('⚠️ Type inconnu:', type, typeStr)
return <FontAwesomeIcon icon={faFire} className={`${finalClass} text-gray-600 dark:text-gray-400`} />
}
}
Expand Down
2 changes: 0 additions & 2 deletions web/src/lib/staticApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,6 @@ export const staticCatalogApi = {

updateVersions: async (name: string, versions: string[], latestVersion?: string, referenceVersion?: string) => {
// Mock version update for static mode
console.log('🔧 Static API: Mock updating versions for service:', name, { versions, latestVersion, referenceVersion })

// In static mode, we just return a mock response
return {
name,
Expand Down
1 change: 0 additions & 1 deletion web/src/pages/AllDriftsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ export default function AllDriftsList() {
type: EventType.DRIFT as unknown as number,
}

console.log('Loading all drifts:', searchParams)
const data = await eventsApi.search(searchParams)

setDrifts(data.events || [])
Expand Down
2 changes: 1 addition & 1 deletion web/src/pages/CatalogDependencies.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import { useMemo, useState, useCallback } from 'react'
import { Button } from '../components/ui/button'
import { Input } from '../components/ui/input'
import { Badge } from '../components/ui/badge'
import KubernetesIcon from '../components/icons/KubernetesIcon'
import { KubernetesIcon } from '../components/icons/KubernetesIcon'

type LayoutType = 'circular' | 'hierarchical' | 'force' | 'grid'
type ViewMode = 'graph' | 'list'
Expand Down
10 changes: 5 additions & 5 deletions web/src/pages/CatalogDetail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ import {
faCube,
faComments
} from '@fortawesome/free-solid-svg-icons'
import KubernetesIcon from '../components/icons/KubernetesIcon'
import KotlinIcon from '../components/icons/KotlinIcon'
import TerraformIcon from '../components/icons/TerraformIcon'
import SlackIcon from '../components/icons/SlackIcon'
import GrafanaIcon from '../components/icons/GrafanaIcon'
import { KubernetesIcon } from '../components/icons/KubernetesIcon'
import { KotlinIcon } from '../components/icons/KotlinIcon'
import { TerraformIcon } from '../components/icons/TerraformIcon'
import { SlackIcon } from '../components/icons/SlackIcon'
import { GrafanaIcon } from '../components/icons/GrafanaIcon'
import {
ReactFlow,
Node,
Expand Down
10 changes: 5 additions & 5 deletions web/src/pages/CatalogTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@ import {
} from '@fortawesome/free-solid-svg-icons'
import { Button } from '../components/ui/button'
import { Input } from '../components/ui/input'
import KubernetesIcon from '../components/icons/KubernetesIcon'
import KotlinIcon from '../components/icons/KotlinIcon'
import TerraformIcon from '../components/icons/TerraformIcon'
import SlackIcon from '../components/icons/SlackIcon'
import GrafanaIcon from '../components/icons/GrafanaIcon'
import { KubernetesIcon } from '../components/icons/KubernetesIcon'
import { KotlinIcon } from '../components/icons/KotlinIcon'
import { TerraformIcon } from '../components/icons/TerraformIcon'
import { SlackIcon } from '../components/icons/SlackIcon'
import { GrafanaIcon } from '../components/icons/GrafanaIcon'
import { Badge } from '../components/ui/badge'
import { Checkbox } from '../components/ui/checkbox'
import { Separator } from '../components/ui/separator'
Expand Down
Loading
Loading