After 12 weeks of hard work, this week i finished the coding of the module 'System Performance and Utilization'. The final indicator that is added was 'Encounter Created' which listens on the created encounters (on the other hand, entered forms) and displays the created encounters per hour and per day.
In addition to that i completed a short video of the final state of the module so far, added a demo on how to add the module, invoke the indicators and observe the displayed data graphs there. By the time of creating the video, the 'Created encounters' indicator was in progress therefore the demo doesn't include the graph for that. However i will be updating it on the module documentation.
The post on the final presentation posted into OpenMRS talk can be found in the below link.
Final demo video:
https://talk.openmrs.org/t/gsoc-2014-system-performance-and-utilization-module-final-presentation/488
Final Presentation Slides:
https://wiki.openmrs.org/display/projects/Final+Evaluation+Resources
Therefore the next week i hope to spend on writing the test cases as well as complete all the testing on the module source code. After that the final week can be spent on adding the documentation and releasing the version 1.1.0 of the module to conclude this great summer !!
Showing posts with label openmrs. Show all posts
Showing posts with label openmrs. Show all posts
Sunday, August 10, 2014
Thursday, July 24, 2014
GSoC Week 10: Application Indicators - Getting user log in count chart
Since my previous attemp of getting logging in users through a SessionListener failed, this week i started back with two alternatives.
1. As suggested by my mentor Pascal, i tried to use a scheduler task for this. But since the task also doesn't have HTTPSession infomation this was not successful.
2. Created a new UI button to enable user login data tracking. When it is tirggerred the HTTPSession of the servlet request is passed to the Collector thread and logged in user count is retirved and stored into the databse from here onwards.
Below is how it is done.
I added a button to UI to click to enable login indicator. When user clicks this button it starts the LoggedInUsersCountCollectorThread with the session as below.
@RequestMapping(value = "/module/systemmetrics/track", method = RequestMethod.GET)
public void track(HttpServletRequest request)
{
loggedInUsersCountCollectorThread = new LoggedInUsersCountCollectorThread(request.getSession());
Thread loginThread = new Thread(loggedInUsersCountCollectorThread);
loginThread.start();
}
After that i can use the current session and get logged in users from time to time. This is similar to how the OpenMRS Core --> Administration --> Maintenance --> View logged in users section is also getting the users list.
public void track(HttpServletRequest request)
{
loggedInUsersCountCollectorThread = new LoggedInUsersCountCollectorThread(request.getSession());
Thread loginThread = new Thread(loggedInUsersCountCollectorThread);
loginThread.start();
}
After that i can use the current session and get logged in users from time to time. This is similar to how the OpenMRS Core --> Administration --> Maintenance --> View logged in users section is also getting the users list.
Below is the chart view of the stored data which is calculated every 30 seconds.
Here are the commits i made for the feature within this week.
- https://github.com/openmrs/openmrs-module-systemmetrics/commit/e9a36740f2eddf35e6d5e435c13286735aecf0be
Since there is a new JIRA project is created for our project now i created the first feature entry there.
- https://issues.openmrs.org/browse/SPU-1
Sunday, July 13, 2014
GSoC Week 08: System Performance and Utilization Module v1.0.0 Released !!
This week i released the first public available version of System Performance and Utilization Module. The 'systemmetrics-1.0.omod' is now available in the OpenMRS module repository and i created the corresponding Git tags v1.0.0 as well as the module documentation.
Below i would like to mention the useful references that helped me in releasing a module against github.
Once you follow the given instructions github will be automatically having the release tag in the git hub repo as below.
https://github.com/openmrs/openmrs-module-systemmetrics/releases
However i still need to deploy the module artifacts into remote nexus repository as i currently don't have access for it. I have submitted an access request and awaiting response on it.
There are few tasks for me to getting done with the 1.0.0 version. First one is deploying the artifacts into nexus. then create a JIRA project and also upload a video on using the module. While working on these things getting done, i hope to move into Application Indicators Implementation from next week too.
Below i would like to mention the useful references that helped me in releasing a module against github.
1. Releasing a module
https://wiki.openmrs.org/display/docs/Module+Tagging+and+ReleasingOnce you follow the given instructions github will be automatically having the release tag in the git hub repo as below.
https://github.com/openmrs/openmrs-module-systemmetrics/releases
However i still need to deploy the module artifacts into remote nexus repository as i currently don't have access for it. I have submitted an access request and awaiting response on it.
2. Module Repository Location
https://modules.openmrs.org/#/show/162/system-performance-and-utilization-module3. Module Documentation
https://wiki.openmrs.org/display/docs/System+Performance+and+Utilization+Module4. Module Source Repository
There are few tasks for me to getting done with the 1.0.0 version. First one is deploying the artifacts into nexus. then create a JIRA project and also upload a video on using the module. While working on these things getting done, i hope to move into Application Indicators Implementation from next week too.
Sunday, July 6, 2014
GSoC Week 07 - Ready for the first release !!
This week i mostly worked on getting used memory indicator finalized for the very first 1.0.0 release of OpenMRS-SystemMetrics module. The final agreement for the release between me and my mentors was get the Memory indicator finalized with Service API and the Graph and releasing it out by the next week.
I was able to work on towards this and complete the memory data during this week and covered the tasks below.
1. Modified the per second memory value graph.
2. Added the next graph on per minute memory values for the Used Memory.
3. Added schedulers to delete the data from per second and per minute data tables in the database periodically. The current time duration is per second data will be deleted in every 30 minutes and per minute data will be cleared in every 5 hours to avoid these tables getting flooded. Evetually these values will be make configurable using global properties so users have the freedom of configuring those as they need.
4. Modified the Module home page and provided links to view the charts and tables.
Module Home Page:
Used Memory Charts page:
For the next week i hope to finish the documentation so far, create the JIRA project and create the first video of the System Performance and Utilization Module and release 1.0.0 version of the module.
Once we get the release out the next task would be start on Application indicators and get the data on logged in users statistics and display it in the module.
I was able to work on towards this and complete the memory data during this week and covered the tasks below.
1. Modified the per second memory value graph.
2. Added the next graph on per minute memory values for the Used Memory.
3. Added schedulers to delete the data from per second and per minute data tables in the database periodically. The current time duration is per second data will be deleted in every 30 minutes and per minute data will be cleared in every 5 hours to avoid these tables getting flooded. Evetually these values will be make configurable using global properties so users have the freedom of configuring those as they need.
4. Modified the Module home page and provided links to view the charts and tables.
Module Home Page:
Used Memory Charts page:
For the next week i hope to finish the documentation so far, create the JIRA project and create the first video of the System Performance and Utilization Module and release 1.0.0 version of the module.
Once we get the release out the next task would be start on Application indicators and get the data on logged in users statistics and display it in the module.
Saturday, June 7, 2014
GSOC Week 3 : Adding new tables for system indicators
In this week i worked on creating Hibernate mappings and adding the newly designed tables system_metric_types and system_metric_values into OpenMRS database. I first created HibernateDAO objects for MetricType object then called that in PerformanceMonitoringServiceImpl service to add/remove/modify MetricType values.
However when i then added MetricType.hbm.xml file and name in config.xml it gave me this error.
org.hibernate.MappingException: Unknown entity: org.openmrs.module.systemmetrics.MetricType
at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:693)
at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1485)
It seemed that hibernate didn't pick up my mapping file entry. With the help of my mentor i finally figured out a way to get rid of it as below. Instead of mapping, i used JPA annoatations.
First create MetricType object and annotate it with Table and column annotations as below. As we define table name, primary key, column names here there is no need to refer a .hbm.xml file
Also the class needed to implement Serializable in order to define Id, which is primary key.
@Entity
@Table(name = "systemmetrics_metric_type")
public class MetricType implements Serializable {
@Id
@Column(name = "metric_id")
private int metricId;
@Id
@Column(name = "metric_name", length = 255)
private String metricName;
@Id
@Column(name = "metric_type", length = 255)
private String metricType;
After that modify config.xml file to use annotated classes. You can comment out mapping-files entry there.
<!-- Maps hibernate file's, if present -->
<!--<mappingFiles></mappingFiles>-->
<!-- Packages that will be scanned for JPA annotations -->
<packagesWithMappedClasses>
org.openmrs.module.systemmetrics
</packagesWithMappedClasses>
<changeSet id="system-metrics-1" author="milinda-ruk">
<createTable tableName="systemmetrics_metric_type">
<column name="metric_id" type="int" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="metric_name" type="varchar(255)">
<constraints nullable="false"/>
</column>
<column name="metric_type" type="varchar(255)">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
Friday, May 30, 2014
GSoC Week 2: Designing database schema for store module data
In this week i had the weekly call with Pascal as usual. As discussed in that, i was mainly working on designing the database schemas for the new module data to be stored. As the first steps i have come up with the following schema for the new tables that will be used in storing system indicators as used memory, heap memory, free memory etc.
Since it is bad practice to define a separate table to each indicator and as it is hard to scale that with time the following design is agreed. We first store metic_name with an id called metric_id in seperate table for all metics. Then another table is used to store real data values against metirc name and id as below.
Metircs Types Table
[ metric_id, time_stamp, metric_value ]
Metic Values Table
[ metric_id, metric_name, metric_type ]
I am now going to follow this way and create the first set of tables and try to store memory data here.
In addition we discussed on handling historical data. As we can't store previous data forever since database is growing, we are going to have a periodical call to calculate the aggregate value of each metric and it will be moved to a seperate table.
I also sent a request to add my new module into OpenMRS reporsitory this week.
Friday, May 23, 2014
Beginning coding with GSoC - Adding a new module
This week started the coding for Google Summer of Code project. As the first task i started writing the new module structure using maven archetype document reference in [1]. Also i discussed with my mentors Pascal and Jan through mail about the first set of indicators to implement and how to do that. Since this is the first week i still didn't start coding for the indicators but focused on creating the now module and adding it to github. As agreed by three of us the new module will be named as openmrs-module-metrics.
Below are few snapshots from the module home page. I will be adding this to github soon and will be starting the coding from next week as planned.
[Module Home Page]
[1] https://wiki.openmrs.org/display/docs/Creating+Your+First+Module
Below are few snapshots from the module home page. I will be adding this to github soon and will be starting the coding from next week as planned.
[Module Link from OpenMRS Home]
[Module Home Page]
[1] https://wiki.openmrs.org/display/docs/Creating+Your+First+Module
Sunday, May 18, 2014
Community Bonding Period of GSoC
During the community bonding period, i had two calls with my mentors Pascal and Jan. In first one we introduced ourselves and discussed about project requirements. As per my mentors guidance, i created a google doc where we will be discussing and adding project requirements and added it into OpenMRS wiki here.
GSoC Project Requirements:
https://wiki.openmrs.org/display/projects/System+Performance+and+Utilization+Module+Requirements
In the second week we identified few main indicators that needed to be searched and tried to implement as first phase and my mentor, pascal requested me to find out how that data can be captured and presented therefore i spent the week on them. Also learnt on how to write a new OpenMRS module as below since it will be my first task to get started with project.
How t write a new module:
https://wiki.openmrs.org/display/docs/Creating+Your+First+Module
GSoC Project Requirements:
https://wiki.openmrs.org/display/projects/System+Performance+and+Utilization+Module+Requirements
In the second week we identified few main indicators that needed to be searched and tried to implement as first phase and my mentor, pascal requested me to find out how that data can be captured and presented therefore i spent the week on them. Also learnt on how to write a new OpenMRS module as below since it will be my first task to get started with project.
How t write a new module:
https://wiki.openmrs.org/display/docs/Creating+Your+First+Module
Wednesday, May 7, 2014
Beginning GSoC 2014 with OpenMRS
It was a wonderful news that after months of hard work i have been selected to Google Summer of Code with OpenMRS. This is my first time in the GSoC. Here is a short description about my project as it will be a help for you to understand that how it works in OpenMRS.
My project is to develop a system performance and utilization module [1]. It's a new OpenMRS module which can supply information on system performance and utilization in order to monitor reliability and impact of the electronic medical record system installation.This module can be used to monitor OpenMRS and transfer specific system indications.
So far, I have already started creating mock GUI's and now I'm going to start the cording part from mid of this month.I have already fixed some bugs in the code earlier. Last week I addressed the GSoC 2014 developer forum to introduce myself to others.
In this week I started the project discussion with my primary mentor Pascal Brandt and backup mentor Jan Flower. We agreed to have this conversation on every week. I hope it will be a good help for make my way to success.
Finally i would like to make a note here that I consider working with OpenMRS community is a big merit for me.
[1] https://wiki.openmrs.org/display/projects/%5BGSoC+2014%5D+System+Performance+and+Utilization+Module
Subscribe to:
Comments (Atom)




