Tuesday, April 28, 2015

NextReports Server: Audits at your hand

By default NextReports Server outputs some events to log files with following action names:
  • Sign in
  • Sign in failed
  • Sign out
  • Add entity
  • Modify entity
  • Delete entity
  • Copy entity
  • Move entity
  • Rename entity
  • Restore entity
  • Grant user / group
  • Revoke user / group
  • Run report
These events have some common properties like id, date, user name, action,session, ip, level (0=info, 1=error), error message. For some events there are also other properties. For example for "Run report" there are report path and duration; for "Grant user" there are entity path, user name to grant for, permissions and recursive flag.

NextReports Server has an extensible auditor feature. A database auditor can be defined to save all these events inside a database. This is very important because NextReports can generate reports over that database to get valuable information.

Inside securityContext.xml there is a bean called auditor:
 <bean class="ro.nextreports.server.audit.CompoundAuditor" id="auditor">
        <property name="auditors">
            <list>
                <ref bean="logAuditor"/>
            </list>
        </property>
</bean>
          

In this list, besides the log auditor we can add a database auditor:

<bean class="ro.nextreports.server.audit.CompoundAuditor" id="auditor">        
        <property name="auditors">             
           <list>
                 <ref bean="logAuditor"/>
                 <ref bean="dbAuditor"/> 
            </list>
        </property>
</bean>       
  
<bean class="ro.nextreports.server.audit.MySqlAuditor" id="dbAuditor">
         <property name="dataSource" ref="auditDataSource"/>
</bean>
   
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="auditDataSource">
      <property name="driverClassName" value="com.mysql.jdbc.Driver"/>      
      <property name="url" value=""/>
      <property name="username" value=""/>
      <property name="password" value=""/>
</bean>

The database behind must contain two tables and a sequence:
  • NS_AUDIT (EVENT_ID, EVENT_DATE, EVENT_USERNAME, EVENT_ACTION, EVENT_SESSION, EVENT_IP, EVENT_LEVEL, EVENT_ERROR_MESSAGE)
  • NS_AUDIT_CONTEXT (EVENT_ID, EVENT_NAME, EVENT_VALUE)
  • NS_AUDIT_SEQ
As stated before, common properties will be saved inside NS_AUDIT, while specific event properties will be saved inside NS_AUDIT_CONTEXT.

For example, for a MySql database we need to call following sqls to initialize:

CREATE TABLE NS_AUDIT (
  EVENT_ID INT UNSIGNED NOT NULL, 
  EVENT_DATE TIMESTAMP, 
  EVENT_USERNAME VARCHAR(50), 
  EVENT_ACTION VARCHAR(30),
  EVENT_SESSION VARCHAR(100), 
  EVENT_IP VARCHAR(20), 
  EVENT_LEVEL  INT(2) , 
  EVENT_ERROR_MESSAGE VARCHAR(150)
) 

CREATE TABLE NS_AUDIT_CONTEXT (
  EVENT_ID INT UNSIGNED, 
  EVENT_NAME VARCHAR(50), 
  EVENT_VALUE VARCHAR(200)
) 
 
CREATE TABLE NS_AUDIT_SEQ( 
  EVENT_ID INT UNSIGNED  NOT NULL,
  CONSTRAINT event_pk PRIMARY KEY (EVENT_ID)
)

INSERT INTO NS_AUDIT_SEQ (EVENT_ID) VALUES(0) 

You should also create an index on EVENT_ID column from NS_AUDIT.

Tuesday, April 14, 2015

NextReports Server: What are the references?

NextReports Server contains (among others) a number of entities like :
  • data sources
  • reports & charts
  • schedulers
  • widgets
  • dashboards
Some of them are referenced by others. For example  any report or chart has a data source. That means a data source is referenced by that report / chart. What happens if we want to delete this data source? User will be informed the action cannot be done because there are other entities that use it.

The message is not very useful to users because if they do not know what are the entities, they must to search for them and delete those first (if the deletion is needed).

From NextReports Server 8.1, users will be informed about these entities with their full path. For example if we want to delete a report which was scheduled by a number of schedulers, the following message will be shown:

In case there are too many referenced entities, only the first 10 will be shown. In next image we want to delete a data source and we will see the list of reports and charts that use it:
In case a report or chart is used (referenced) inside a dashboard as a widget, it can be deleted and the user will see inside dashboard a message that the entity behind it was removed.

Thursday, April 02, 2015

NextReports Server: Dashboard Embedded Code

NextReports Server is able to offer dashboards page as an url like

http://localhost:8081/nextreports-server/app/dashboards

This will bring to users the following page, without header, footer and tabs menu:


From version 8.1 a new Dashboard Embedded Code action is available in dashboard popup actions:


This will give users the url for a specific dashboard:

http://localhost:8081/nextreports-server/app/dashboard?dashboardId=4f6cb7bd-c8df-4ffd-91a9-38c2c2c50b16


This url will show users the dashboard without navigator and buttons and will become the default way of how to show a full dashboard on a monitor screen for visualization.