| Age | Commit message (Collapse) | Author | Files | Lines |
|
- Fix three structural bugs found by locale audit:
- ka-GE: rename pageFirmware.sectionTitleHostCards to
sectionTitleBiosCards to match the key used by
FirmwareCardsBios.vue.
- ru-RU: move global.offline.okToRetryCancelToLogin out of
global.toast.offline to global.offline, restoring the correct
nesting path that matches en-US and ka-GE.
- PostCodeLogs: fix deleteAllLogs confirm dialog to reference
pagePostCodeLogs.modal.deleteAllMessage/Title instead of
pageEventLogs.modal.*, decoupling the two pages so future
wording changes to Event Logs cannot silently affect Post
Code Logs.
- TableDns: fix delete action title passed as a raw key string
literal to TableRowAction; wrap with i18n.global.t() so the
translated string is rendered instead of the key path.
- Remove 30 unused translation keys from all three locale files
(en-US, ru-RU, ka-GE). They were not being used.
Change-Id: I7edd9b326e1a4ad096508d5ed1661e1234c7f571
Signed-off-by: Nikhil Ashoka <a.nikhil@ibm.com>
|
|
Non-admin users navigating to the Serial Over LAN page had no
clear feedback — the page either failed silently or showed a
generic error. Show the SOL button and nav item to all users
and render an Access Denied alert when the session lacks the
required privilege.
A reusable AccessDeniedAlert global component is introduced
so other restricted pages can adopt the same pattern with a
single line.
Change-Id: Ifbb93bb966c801b3a72230e8f3b752b62ef22929
Signed-off-by: Aravinth Sri Krishna Raja Raghavan <aravinths@ami.com>
|
|
This change switches power control to the EnvironmentMetrics-based
Redfish endpoint, derives minimum and maximum power cap values
dynamically from Redfish data, and updates ControlMode and SetPoint
handling to align with the latest schema.
Key changes:
1. Power control API and Redfish types:
- Removes src/api/services/powerControlService.ts; fetching and
PATCH are handled in the composable using shared Redfish utilities
- Adds EnvironmentMetrics and PowerLimitWatts types in
src/api/types/redfish.ts with proper ControlMode enum
('Automatic' | 'Disabled' | 'Manual' | 'Override')
- Chassis gains an EnvironmentMetrics link
- Composable resolves the Chassis collection via
useRedfishCollection<Chassis>('/redfish/v1/Chassis'), picks the
first chassis with EnvironmentMetrics, and fetches that resource
with useQuery; mutation sends PATCH and invalidates queries to
refetch fresh server state (returns Promise<void>; view owns
user-facing messages)
2. Power control composable
(src/components/Composables/usePowerControl.ts):
- Replaces Vuex PowerControlStore with a Composition API-based
composable
- Uses useRedfishRoot() and useRedfishCollection for cached
ServiceRoot and Chassis; uses TanStack Query to load and cache
EnvironmentMetrics power data
- Configures staleTime (30s freshness window) and refetchInterval
(30s automatic polling when tab visible) for live power
consumption updates
- Note: Only controls the first Chassis with EnvironmentMetrics in
multi-chassis systems (intentional for current use case)
- Forwards AbortSignal to API calls for proper request cancellation
- Reuses shouldRetry function from useAllSubResources
- Derives dynamic min and max power cap values from Redfish
PowerLimitWatts.AllowableMin/Max
- Provides a mutation for submitting updated SetPoint and
ControlMode; omits SetPoint when disabling to avoid sending
invalid values
- Handles all ControlMode enum values (Automatic, Disabled, Manual,
Override); UI sets Automatic/Disabled but preserves Manual/Override
when read from server
- Type-safe parameters (number | null instead of string coercion)
3. Toast composable and global plugin:
- useToast.ts (renamed from .js) uses bootstrap-vue-next useToast()
with TypeScript types; keeps successToast/errorToast API with
i18n titles
- Type restricted to string for simplicity; includes TODO for
potential VNode support expansion if needed
- src/plugins/toast.js continues to expose global $toast for
Options API
- BVToastMixin.js updated to use modelValue and extract VNode
content for consistency with bootstrap-vue-next 0.40.8
- Both implementations use isStatus: true for consistent toast
styling with status icons
4. Views modernization:
- Refactors src/views/ResourceManagement/Power.vue to use
<script setup>, usePowerControl(), and the new toast composable;
submitForm uses try/catch and
t('pageServerPowerOperations.toast.*') for success/error toasts
- Implements value caching to preserve user's typed input when
toggling power cap checkbox on/off
- Guards form sync watcher with v$.value?.$dirty check to prevent
overwriting in-progress edits during background refetch
- Loader semantics: show on first load (isLoading) and mutations,
but render cached data instantly on subsequent visits with silent
background refetch (avoids flicker)
- Renamed validator from 'between' to 'withinPowerCapRange' to
avoid confusion with Vuelidate's built-in validator
- Handles all ControlMode values (Automatic, Disabled, Manual,
Override) in form state synchronization
- Refactors src/views/Overview/OverviewPower.vue to read from the
power control composable instead of Vuex; implements settled
computed to emit overview-power-complete only when chassis
collection is fetched AND either no EnvironmentMetrics exists or
metrics query has completed (prevents premature completion)
- Shows power cap for all active control modes (Automatic, Manual,
Override)
- Removes mapState/mapActions usage and related Vuex wiring
5. Store cleanup and typing:
- Deletes src/store/modules/ResourceManagement/PowerControlStore.js
- Removes PowerControlStore registration from src/store/index.js
- Updates src/store/api.d.ts to match actual implementation
(set_auth_token with snake_case, accepts string | null |
undefined)
- Adds src/i18n.d.ts to provide basic typing for the shared api
Tested-by: Manual testing on development server
- Power consumption and cap values load correctly from
EnvironmentMetrics with automatic 30-second polling (refetchInterval)
when tab is visible
- Min and max power cap values reflect dynamic limits from Redfish
- Updating the power cap and enable state sends correct SetPoint and
ControlMode values; SetPoint is omitted when disabling
- All ControlMode values (Automatic, Disabled, Manual, Override) are
handled correctly
- User's typed values are preserved when toggling power cap checkbox
- Form edits are not overwritten by background refetch (dirty state
guard)
- Success/error toasts show localized messages with consistent
modelValue-based timing and status icons
- Overview power card reflects updated power state; overview loader
waits for both chassis and metrics queries to settle before
completing
- Request cancellation works properly on component unmount
Change-Id: Ic61631efd8790150a5e2914822f1dd25bd77305a
Signed-off-by: Nikhil Ashoka <a.nikhil@ibm.com>
|
|
Disables firmware update page buttons for users with "Read-only"
privileges to improve user experience. This helps users understand
when they lack permissions to perform firmware updates based on
their current session role.
This is a UI-only improvement. Backend (bmcweb) validates all
operations according to Redfish privilege rules regardless of
UI state.
Changes:
- Created reusable usePrivilegeCheck() composable
- Added privilege check to disable firmware update controls for
read-only users
- Added info banner to notify "The attempted action is not accessible
from the logged in account. Contact your system administrator to check
your privilege role".
- Follows Vue 3 Composition API patterns
Tested-by: Manual testing with Administrator, Operator, and
ReadOnly roles
Change-Id: I7e6e28267b094ab04f7dcc4b1e0cc609dc7f5e28
Signed-off-by: Aravinth Sri Krishna Raja Raghavan <aravinths@ami.com>
|
|
This commit updates the implementation to dynamically
discover all chassis and fetch sensors from each.
Changes include:
- Updated useSensors to use /redfish/v1/Chassis collection endpoint
- Fixed discoverParentsWithSubResource to properly check individual
chassis members for Sensors sub-resource
The implementation now automatically discovers all chassis, fetches
sensors from each, and deduplicates results by @odata.id.
Tested: Verified sensors display from all chassis in
multi-chassis systems
Change-Id: Idadaef1be1b019cdded52ce7debe6f5f795e985e
Signed-off-by: Nishant Tiwari <tiwari.nishant@ibm.com>
|
|
Introduce reusable Redfish API infrastructure and modernize the Sensors
page to use Vue 3 Composition API with TanStack Query, eliminating the
need for Vuex store patterns for server state management.
This change provides a foundation for migrating other hardware status
pages (Memory, Processors, Drives, etc.) to a more maintainable and
performant architecture.
Key changes:
1. Generic Redfish composables (src/api/composables/):
- useRedfishRoot.ts: Caches ServiceRoot and detects OData support
- useRedfishCollection.ts: Smart collection fetcher with OData
$expand/$select support and graceful fallback
- useAllSubResources.ts: Generic pattern for fetching nested
resources from parent collections
2. Sensors page modernization:
- Migrated from Vuex store to TanStack Query (Vue Query)
- Created useSensors.ts composable for data fetching
- Removed legacy Thermal and PowerSubsystem endpoints
- Now uses only modern /Chassis/{id}/Sensors collection
- Maintains existing UI/UX with Bootstrap Vue table
3. TypeScript support:
- Added tsconfig.json and webpack ts-loader configuration
- Created required Redfish type definitions
- Preserves Redfish PascalCase property names
4. Performance optimizations:
- Auto-detects and uses OData $expand for fewer API calls
- Implements automatic caching and deduplication
- Smart retry logic with exponential backoff
- 30-second stale time with 5-minute garbage collection
Benefits for future development:
- The generic composables are designed for reuse across components:
// Fetch all Memory from all Systems
useAllSubResources<Memory>('/redfish/v1/Systems', 'Memory')
// Fetch all Drives from all Storage
useAllSubResources<Drive>('/redfish/v1/Storage', 'Drives')
- Implemented TypeScript types
- Reuses existing Bootstrap table components
- Preserves existing UI/UX
- Focuses on infrastructure reusability
This pattern eliminates boilerplate Vuex store code and provides
better developer experience with automatic loading states, error
handling, and background refetching.
Tested-by: Manual testing on development server
- Sensors page loads correctly
- OData optimization works when supported
- Graceful fallback when OData unavailable
- All table functionality preserved (sorting, filtering,
export, cancel and searching)
Change-Id: Id605319140f607b295d24085f3681f09ac0d5ebd
Signed-off-by: Nishant Tiwari <tiwari.nishant@ibm.com>
|