Report Development


Hi all,
We use phabricator from some time and now it’s the time to some management request.
I know that Conduit API it a very powerful tool, but in many case building some report for the management requires further data processing.
I have decided to develop some extension to extract data in such a way that is already consumable from reporting modules, without (o with very small) post processing. My goal is to design an AngularJS/HTM5 application that will reside in the same installation of phabricator, and that will be well integrated with Phabricator.
The internal query system of Phabricator in not very well documented, but analyzing the existing applications several information can be acquired.
But it’s also true that writing down some database view can simplify very much the query building.
I seen, further, that ther’s a database (phabricator) that is completely empty: Do you think I can use it for the database view base or it’s reserved for some future use? Do you think that using views in query building of the php extension (I don’t want to write an application, actually, but only extending Conduit API of existing application) violates some Phabricator extending requirements?
Moreover, any suggestion about this?


The phabricator database isn’t one of the phabricator suite - all DBs are called {namespace}_{appilcation}, where {namespace} is phabricator by default. This DB was probably created by someone during installation.

I don’t think adding views will break anything, unless we’ll end up needing the name later; I’m no DB expert, but be prepared to have migrations changing schemas and data in the database, which may or may not effect your views. If you add keys to existing tables, the upgrade/adjust flow might try to remove them because they are not documented in the code.
AFAIK, querying views instead of databases should look exactly the same (The code doesn’t need to know it’s a view).

You can add a conduit method by dropping a class anywhere that extends the right base class, such as ProjectConduitAPIMethod or ManiphestConduitAPIMethod. The new class doesn’t have to be in the same directory as the application; It will be picked up by arc liberate.