Skip to content

Commit 46b598b

Browse files
committed
Improve command functionality
1 parent 7b29b15 commit 46b598b

14 files changed

Lines changed: 851 additions & 89 deletions

File tree

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,19 @@ api.unregisterDatabase(DatabaseType.MYSQL, "default");
7676

7777
If you maintain multiple plugins, this gives your team one standard integration model instead of backend-specific code per project.
7878

79+
## Admin Commands
80+
81+
- `/dataprovider help` shows command usage.
82+
- `/dataprovider status [summary|connections] [unhealthy] [plugin <name>] [type <databaseType>]` shows active connection diagnostics.
83+
- `/dataprovider config` prints current runtime config state (`orm.schema_mode` + backend enablement).
84+
- `/dataprovider reload` reloads `config.yml` from disk.
85+
86+
Permissions:
87+
88+
- `dataprovider.command.status`
89+
- `dataprovider.command.config`
90+
- `dataprovider.command.reload`
91+
7992
## Install DataProvider (Server)
8093

8194
1. Build or download `DataProvider.jar`.

docs/ARCHITECTURE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Main modules:
4444

4545
- `PlatformDataProviderRuntime` centralizes bootstrap shutdown behavior and startup rollback handling.
4646
- Platform command adapters delegate to a shared `DataProviderCommandService` so Bukkit and Velocity command behavior stays identical.
47+
- Command service exposes diagnostics-focused admin commands (`status`, `config`, `reload`) with permission-gated filtering and runtime health summaries.
4748
- API discovery is platform-native: Bukkit registers `DataProviderAPI` in `ServicesManager`; Velocity exposes `DataProviderApiSupplier` on plugin instance.
4849
- Platform-specific wrappers only map host APIs to shared internals (logger, command registration, event/plugin lifecycle hooks).
4950

docs/USAGE_GUIDE.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,20 @@ Treat `DataProviderAPI` as runtime-scoped, not permanent.
3535
- Do not keep API references across plugin reloads or disable/enable cycles.
3636
- After DataProvider shuts down, old API handles throw `IllegalStateException`; reacquire a fresh API after DataProvider is enabled again.
3737

38+
## 1.2 Built-in admin commands
39+
40+
`DataProvider` ships with runtime diagnostics commands for Bukkit/Paper and Velocity:
41+
42+
- `/dataprovider status [summary|connections] [unhealthy] [plugin <name>] [type <databaseType>]`
43+
- `/dataprovider config`
44+
- `/dataprovider reload`
45+
46+
Permission nodes:
47+
48+
- `dataprovider.command.status`
49+
- `dataprovider.command.config`
50+
- `dataprovider.command.reload`
51+
3852
## 2. Register a connection
3953

4054
Basic:

src/main/java/nl/hauntedmc/dataprovider/internal/DataProviderHandler.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,33 @@ public Map<DatabaseConnectionKey, Integer> getActiveDatabaseReferenceCounts() {
247247
return registry.getActiveDatabaseReferenceCounts();
248248
}
249249

250+
/**
251+
* Returns the configured enabled/disabled state per database backend type.
252+
*/
253+
public Map<DatabaseType, Boolean> getConfiguredDatabaseTypeStates() {
254+
requireOpen();
255+
requireInternalCaller();
256+
return registry.getConfiguredDatabaseTypeStates();
257+
}
258+
259+
/**
260+
* Returns the normalized configured ORM schema mode.
261+
*/
262+
public String getConfiguredOrmSchemaMode() {
263+
requireOpen();
264+
requireInternalCaller();
265+
return registry.getOrmSchemaMode();
266+
}
267+
268+
/**
269+
* Reloads DataProvider configuration from disk.
270+
*/
271+
public void reloadConfiguration() {
272+
requireOpen();
273+
requireInternalCaller();
274+
registry.reloadConfiguration();
275+
}
276+
250277
private CallerContext resolveCallerContext() {
251278
CallerContext caller = callerContextResolver.resolveCaller();
252279
if (caller == null) {

src/main/java/nl/hauntedmc/dataprovider/internal/DataProviderRegistry.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import nl.hauntedmc.dataprovider.database.DatabaseProvider;
77
import nl.hauntedmc.dataprovider.logging.LoggerAdapter;
88

9+
import java.util.EnumMap;
910
import java.util.HashMap;
1011
import java.util.Map;
1112
import java.util.Objects;
@@ -413,6 +414,44 @@ protected Map<DatabaseConnectionKey, Integer> getActiveDatabaseReferenceCounts()
413414
}
414415
}
415416

417+
protected Map<DatabaseType, Boolean> getConfiguredDatabaseTypeStates() {
418+
Lock readLock = lifecycleLock.readLock();
419+
readLock.lock();
420+
try {
421+
ensureOpen();
422+
Map<DatabaseType, Boolean> states = new EnumMap<>(DatabaseType.class);
423+
for (DatabaseType type : DatabaseType.values()) {
424+
states.put(type, configHandler.isDatabaseTypeEnabled(type));
425+
}
426+
return states;
427+
} finally {
428+
readLock.unlock();
429+
}
430+
}
431+
432+
protected String getOrmSchemaMode() {
433+
Lock readLock = lifecycleLock.readLock();
434+
readLock.lock();
435+
try {
436+
ensureOpen();
437+
return configHandler.getOrmSchemaMode();
438+
} finally {
439+
readLock.unlock();
440+
}
441+
}
442+
443+
protected void reloadConfiguration() {
444+
Lock writeLock = lifecycleLock.writeLock();
445+
writeLock.lock();
446+
try {
447+
ensureOpen();
448+
configHandler.reloadConfig();
449+
logger.info("Reloaded DataProvider configuration from disk.");
450+
} finally {
451+
writeLock.unlock();
452+
}
453+
}
454+
416455
protected boolean isClosed() {
417456
return closed;
418457
}

src/main/java/nl/hauntedmc/dataprovider/platform/bukkit/command/DataProviderCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
3333
@Override
3434
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command,
3535
@NotNull String alias, String[] args) {
36-
return commandService.suggest(args);
36+
return commandService.suggest(args, sender::hasPermission);
3737
}
3838
}

0 commit comments

Comments
 (0)