mirror of
https://github.com/modrinth/code.git
synced 2026-08-31 03:55:59 +00:00
feat: add show ram as bytes always on
This commit is contained in:
@@ -157,6 +157,11 @@ provideModrinthClient(tauriApiClient)
|
|||||||
providePageContext({
|
providePageContext({
|
||||||
hierarchicalSidebarAvailable: ref(true),
|
hierarchicalSidebarAvailable: ref(true),
|
||||||
showAds: ref(false),
|
showAds: ref(false),
|
||||||
|
featureFlags: {
|
||||||
|
serverRamAsBytesAlwaysOn: computed(() =>
|
||||||
|
themeStore.getFeatureFlag('server_ram_as_bytes_always_on'),
|
||||||
|
),
|
||||||
|
},
|
||||||
openExternalUrl: (url) => openUrl(url),
|
openExternalUrl: (url) => openUrl(url),
|
||||||
})
|
})
|
||||||
provideModalBehavior({
|
provideModalBehavior({
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ export const DEFAULT_FEATURE_FLAGS = {
|
|||||||
worlds_tab: false,
|
worlds_tab: false,
|
||||||
worlds_in_home: true,
|
worlds_in_home: true,
|
||||||
server_project_qa: false,
|
server_project_qa: false,
|
||||||
|
server_ram_as_bytes_always_on: false,
|
||||||
i18n_debug: false,
|
i18n_debug: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ export const DEFAULT_FEATURE_FLAGS = validateValues({
|
|||||||
showProjectPageQuickServerButton: false,
|
showProjectPageQuickServerButton: false,
|
||||||
newProjectGeneralSettings: false,
|
newProjectGeneralSettings: false,
|
||||||
newProjectEnvironmentSettings: true,
|
newProjectEnvironmentSettings: true,
|
||||||
|
serverRamAsBytesAlwaysOn: false,
|
||||||
archonSentryCapture: false,
|
archonSentryCapture: false,
|
||||||
hideRussiaCensorshipBanner: false,
|
hideRussiaCensorshipBanner: false,
|
||||||
disablePrettyProjectUrlRedirects: false,
|
disablePrettyProjectUrlRedirects: false,
|
||||||
|
|||||||
@@ -1,12 +1,18 @@
|
|||||||
import { provideModalBehavior, providePageContext } from '@modrinth/ui'
|
import { provideModalBehavior, providePageContext } from '@modrinth/ui'
|
||||||
import { computed, ref } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
|
|
||||||
|
import { useFeatureFlags } from '~/composables/featureFlags.ts'
|
||||||
|
|
||||||
export function setupPageContextProvider() {
|
export function setupPageContextProvider() {
|
||||||
const cosmetics = useCosmetics()
|
const cosmetics = useCosmetics()
|
||||||
|
const featureFlags = useFeatureFlags()
|
||||||
|
|
||||||
providePageContext({
|
providePageContext({
|
||||||
hierarchicalSidebarAvailable: ref(false),
|
hierarchicalSidebarAvailable: ref(false),
|
||||||
showAds: ref(false),
|
showAds: ref(false),
|
||||||
|
featureFlags: {
|
||||||
|
serverRamAsBytesAlwaysOn: computed(() => featureFlags.value.serverRamAsBytesAlwaysOn),
|
||||||
|
},
|
||||||
openExternalUrl: (url) => window.open(url, '_blank'),
|
openExternalUrl: (url) => window.open(url, '_blank'),
|
||||||
})
|
})
|
||||||
provideModalBehavior({
|
provideModalBehavior({
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ pub enum FeatureFlag {
|
|||||||
ProjectBackground,
|
ProjectBackground,
|
||||||
WorldsTab,
|
WorldsTab,
|
||||||
WorldsInHome,
|
WorldsInHome,
|
||||||
|
ServerRamAsBytesAlwaysOn,
|
||||||
ServersInApp,
|
ServersInApp,
|
||||||
ServerProjectQa,
|
ServerProjectQa,
|
||||||
I18nDebug,
|
I18nDebug,
|
||||||
|
|||||||
@@ -89,12 +89,15 @@
|
|||||||
</div>
|
</div>
|
||||||
<span>{{ prefConfig.description }}</span>
|
<span>{{ prefConfig.description }}</span>
|
||||||
</label>
|
</label>
|
||||||
<Toggle
|
<div v-tooltip="getPreferenceTooltip(key)">
|
||||||
:id="`pref-${key}`"
|
<Toggle
|
||||||
v-model="newUserPreferences[key]"
|
:id="`pref-${key}`"
|
||||||
class="flex-none"
|
:model-value="getPreferenceValue(key)"
|
||||||
:disabled="!prefConfig.implemented"
|
class="flex-none"
|
||||||
/>
|
:disabled="!prefConfig.implemented || isPreferenceForcedByFeatureFlag(key)"
|
||||||
|
@update:model-value="(value) => setPreferenceValue(key, !!value)"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Info -->
|
<!-- Info -->
|
||||||
@@ -138,11 +141,13 @@ import {
|
|||||||
injectModrinthClient,
|
injectModrinthClient,
|
||||||
injectModrinthServerContext,
|
injectModrinthServerContext,
|
||||||
injectNotificationManager,
|
injectNotificationManager,
|
||||||
|
injectPageContext,
|
||||||
} from '#ui/providers'
|
} from '#ui/providers'
|
||||||
|
|
||||||
const { addNotification } = injectNotificationManager()
|
const { addNotification } = injectNotificationManager()
|
||||||
const client = injectModrinthClient()
|
const client = injectModrinthClient()
|
||||||
const { server: data, serverId, busyReasons } = injectModrinthServerContext()
|
const { server: data, serverId, busyReasons } = injectModrinthServerContext()
|
||||||
|
const { featureFlags } = injectPageContext()
|
||||||
const queryClient = useQueryClient()
|
const queryClient = useQueryClient()
|
||||||
|
|
||||||
const serverName = ref(data.value?.name)
|
const serverName = ref(data.value?.name)
|
||||||
@@ -207,6 +212,28 @@ const userPreferences = useStorage<UserPreferences>(
|
|||||||
|
|
||||||
const newUserPreferences = ref<UserPreferences>(JSON.parse(JSON.stringify(userPreferences.value)))
|
const newUserPreferences = ref<UserPreferences>(JSON.parse(JSON.stringify(userPreferences.value)))
|
||||||
|
|
||||||
|
const isRamAsBytesForcedByFeatureFlag = computed(
|
||||||
|
() => featureFlags?.serverRamAsBytesAlwaysOn?.value ?? false,
|
||||||
|
)
|
||||||
|
|
||||||
|
const isPreferenceForcedByFeatureFlag = (key: string) =>
|
||||||
|
key === 'ramAsNumber' && isRamAsBytesForcedByFeatureFlag.value
|
||||||
|
|
||||||
|
const getPreferenceTooltip = (key: string) =>
|
||||||
|
isPreferenceForcedByFeatureFlag(key)
|
||||||
|
? 'Feature flag enabled to always show RAM as bytes.'
|
||||||
|
: undefined
|
||||||
|
|
||||||
|
const getPreferenceValue = (key: string) =>
|
||||||
|
isPreferenceForcedByFeatureFlag(key) ? true : newUserPreferences.value[key as PreferenceKeys]
|
||||||
|
|
||||||
|
const setPreferenceValue = (key: string, value: boolean) => {
|
||||||
|
if (isPreferenceForcedByFeatureFlag(key)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
newUserPreferences.value[key as PreferenceKeys] = value
|
||||||
|
}
|
||||||
|
|
||||||
// Info properties
|
// Info properties
|
||||||
const infoProperties = [
|
const infoProperties = [
|
||||||
{ name: 'Server ID', value: serverId ?? 'Unknown' },
|
{ name: 'Server ID', value: serverId ?? 'Unknown' },
|
||||||
|
|||||||
@@ -60,11 +60,12 @@ import { useStorage } from '@vueuse/core'
|
|||||||
import { computed, defineAsyncComponent, ref, shallowRef, watch } from 'vue'
|
import { computed, defineAsyncComponent, ref, shallowRef, watch } from 'vue'
|
||||||
import { RouterLink } from 'vue-router'
|
import { RouterLink } from 'vue-router'
|
||||||
|
|
||||||
import { injectModrinthServerContext } from '#ui/providers'
|
import { injectModrinthServerContext, injectPageContext } from '#ui/providers'
|
||||||
|
|
||||||
const VueApexCharts = defineAsyncComponent(() => import('vue3-apexcharts'))
|
const VueApexCharts = defineAsyncComponent(() => import('vue3-apexcharts'))
|
||||||
|
|
||||||
const { serverId } = injectModrinthServerContext()
|
const { serverId } = injectModrinthServerContext()
|
||||||
|
const { featureFlags } = injectPageContext()
|
||||||
|
|
||||||
const props = withDefaults(
|
const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
@@ -83,6 +84,9 @@ const chartsReady = ref(new Set<number>())
|
|||||||
const userPreferences = useStorage(`pyro-server-${serverId || 'unknown'}-preferences`, {
|
const userPreferences = useStorage(`pyro-server-${serverId || 'unknown'}-preferences`, {
|
||||||
ramAsNumber: false,
|
ramAsNumber: false,
|
||||||
})
|
})
|
||||||
|
const isRamAsBytesForcedByFeatureFlag = computed(
|
||||||
|
() => featureFlags?.serverRamAsBytesAlwaysOn?.value ?? false,
|
||||||
|
)
|
||||||
|
|
||||||
const stats = shallowRef(
|
const stats = shallowRef(
|
||||||
props.data?.current || {
|
props.data?.current || {
|
||||||
@@ -214,7 +218,9 @@ const metrics = computed(() => {
|
|||||||
{
|
{
|
||||||
title: 'Memory',
|
title: 'Memory',
|
||||||
value:
|
value:
|
||||||
props.showMemoryAsBytes || userPreferences.value.ramAsNumber
|
props.showMemoryAsBytes ||
|
||||||
|
isRamAsBytesForcedByFeatureFlag.value ||
|
||||||
|
userPreferences.value.ramAsNumber
|
||||||
? formatBytes(stats.value.ram_usage_bytes ?? 0)
|
? formatBytes(stats.value.ram_usage_bytes ?? 0)
|
||||||
: `${ramPercent.value.toFixed(2)}%`,
|
: `${ramPercent.value.toFixed(2)}%`,
|
||||||
icon: DatabaseIcon,
|
icon: DatabaseIcon,
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ export interface PageContext {
|
|||||||
// pages may render sidebar content in #sidebar-teleport-target instead of in the main layout when true
|
// pages may render sidebar content in #sidebar-teleport-target instead of in the main layout when true
|
||||||
hierarchicalSidebarAvailable: Ref<boolean>
|
hierarchicalSidebarAvailable: Ref<boolean>
|
||||||
showAds: Ref<boolean>
|
showAds: Ref<boolean>
|
||||||
|
featureFlags?: {
|
||||||
|
serverRamAsBytesAlwaysOn?: Ref<boolean>
|
||||||
|
}
|
||||||
openExternalUrl: (url: string) => void
|
openExternalUrl: (url: string) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user