How do I register a tabhook with the new interface? Is it even possible?
Is there a simple/example plugin for icingadbweb similar to the pnp module?
My plugin seems to show up in some legacy mode (via CompatObject). An attempt to read $object->service to get service name throws an exception: Uncaught Error: Call to undefined method Icinga\Module\Icingadb\Compat\CompatService::fetchService() in /usr/local/www/icingaweb2/modules/icingadb/library/Icingadb/Compat/CompatObject.php:269, although now there is $object->name. Is it intentional or a bug?
How do I register a tabhook with the new interface? Is it even possible?
Yes. By $this->provideHook('Icingadb/Tab') and a class in the usual place.
Is there a simple/example plugin for icingadbweb similar to the pnp module?
No. Not yet.
My plugin seems to show up in some legacy mode (via CompatObject).
Icinga DB Web currently doesn’t even support the legacy integration of Monitoring/ObjectDetailsTab hooks. So I don’t know how you got that error. Which hook are you actually using?