rapidftr / tracker Goto Github PK
View Code? Open in Web Editor NEWThe Issue Tracker for RapidFTR
The Issue Tracker for RapidFTR
The existing reports within RapidFTR are created by a scheduler which runs every so often to generate the reports which can be accessed through a user's browser. Some deployments are having issues accessing reports which points to failure in the scheduler. This fix should ensure that the scheduler persists through known failure scenarios especially OS shutdown, etc.
Currently, the APK used with the integration tests has android device administration enabled. This causes problems when running integration tests with Calabash, since calabash cannot by default seamlessly install and uninstall the APK without disabling device administration first. We need to set up a separate profile for tests so that the APK used with the integration tests does not have Device Administration enabled.
We're currently using Solr for all advanced search capabilities. We would like to evaluate ElasticSearch on the following lines:
Using Docker to create a one-click installer for Linux OSes. The installer will be stored in Dropbox folder available publicly.
PhotoView is a nice Android widget that allows to pan and zoom images. We can use this when showing child's full size image.
Presently, CouchDB via Chef is installed without HTTPS, and with a default
username/password of rapidftr/rapidftr
. This needs to be secured as follows:
rapidftr-infrastructure
is the Chef repository. It is linked as a git submodule into the main RapidFTR
repository. You can quickly get a production VM up and running by cloning the RapidFTR
repository, and running vagrant up prod
.site-cookbooks/couchdb
.site-cookbooks/rapidftr
cookbook. There can be multiple instances of RapidFTR running under the same machine. So each one needs to have a separate admin username/password for CouchDB. Each instance of RapidFTR will have a unique hostname. The default hostname is "localhost"./etc/couchdb/local.ini
, or by adding our own configuration files under the /etc/couchdb/local.d
folder.site-cookbooks/couchdb/files
. Easy way is to create self signed certificates. This part of creating the certificate need not be automated, ideally the system administrator would already have SSL certificates. The cookbook should simply copy over the certificates. For example, refer the rapidftr
cookbook.rapidftr
cookbook, for each deployment, we need to generate an administrator for CouchDB. The sysadmin need not know this username/password, it can be automatically created. The easiest way is to create a local couchdb config file, called /etc/couchdb/local.d/<hostname>.ini
, which will have the admin user configuration for this rapidftr instance. Both username and password can be randomized UUIDs.rapidftr
cookbook. Edit this task to use the generated username/password.rapidftr/rapidftr
couchdb user from the "local.ini" master configuration file.Move to GitHub issues for issue tracking, and Waffle for the board.
Open Issues:
@Quoin has upgraded RapidFTR and most of its plugins to Rails 4 and Ruby 2. We need to merge those changes into the current codebase. The changes can be viewed here:
Use Chef instead of Capistrano for production deployment. Chef has been chosen after evaluation Ansible and Salt. Ansible doesn't support Windows, and Salt is not stable in Vagrant. The idea is to use the same Chef scripts for both Vagrant as well as real Production deployments.
When syncing large photos/media the sync process crashes and the dialog either hangs or disappears on different devices. The proposed fix is to ensure that device only downloads resized photos.
When a user provides a different URL on their mobile device, they're logged into the instance that was provided during initial set up/. This fix will ensure that a user can login to different instances using the same device.
Currently we're not tracking Code Quality metrics in any stage. We need to add that as a rake task so that we can fail the build whenever code quality goes down.
CodeClimate does an excellent job, and that's where we'd like to be. But unfortunately it can't be integrated into the rake tasks - it simply runs after merging, which makes it an afterthought.
We need some tool that can directly run as a rake task, raise an error and fail the build if metrics are going down. ruby-toolbox has a good selection of gems for this purpose.
We're presently storing JSON serialized data in SQLCipher (SQLite-like, but encrypts data on storage). We'd like to evaluate Couchbase Lite for Android for storing data instead, since its already in JSON form.
Challenges:
This feature shall enable support for multi lingual deployments of RapidFTR. A user should be able to search for data in a preconfigured language using their device. At the moment, any text with accented characters isn't well displayed on the screen and searches using these characters do not return any results.
This is a placeholder story...
Upgrade Android to version 4.0.3 since all devices coming out in the market now are 4.x devices, and its extremely difficult to even procure 2.x devices anymore.
android.os.NetworkOnMainThreadException
Producer
that takes as input the Cursor
(with records filtered using LIKE
), and this should loop through the cursor and yield only the matching childrenThis release of RapidFTR will enable a SYS ADMIN choose whether to use standard set of forms or define/customise their own set of forms during deployment. This feature will include implementation of the steps necessary to achieve this set up.
After using the installer to set up RapidFTR, the admin would access the URL to the server instance and immediately be provided with options to configure the instance.
OkHTTP is an awesome HTTP client for Java. It is optimized for best network use (SPDY, connection pooling, etc) and comes with excellent sane defaults.
We use a class called FluentRequest
for all HTTP connections. We don't use Apache HTTPClient directly in the code anywhere. So it should be easy to pick this one class, and replace Apache HTTP client with the OkHTTP client.
For an idea of how to configure the OkHTTP client, please take a look at the spike code. Also take a look at the spike story #9. OkHTTP is very simple and barebones. It delegates all the Multipart form uploads to an addon library called Mimecraft, again by the same developers. So you'll likely end up using both OkHTTP and Mimecraft.
Use one or more of the following suggestions to improve performance in low bandwidth situations:
Retrofit is a clever HTTP REST Client library. As part of this spike, we would like to know:
Some Default Fields are hard coded in code (e.g. Name, Protection Status, FTR Status, etc). We need to remove these hard coded values to make the Form Builder as customizable as we want it to be.
This feature shall enable support for multi lingual deployments of RapidFTR. A user should be able to search for data in any language. At the moment, searches using these characters do not return any results.
Deployment instructions have changed since switching to Chef. Update documentation and upgrade path.
Presently in Android, we're using plain-ol SQL queries with custom DAO objects. We want to move to using a lightweight data access layer like JDBI.
Goals:
Challenges:
Check google groups post: https://groups.google.com/forum/#!topic/rapidftr/6BbrZfr-2Zc
The process of setting up Android in user's machine is very long and complicated. You have to install the SDK, various APIs and Machine Images, create AVDs, etc. For a newcomer having a few hours - it takes the whole time to setup the machine, instead of developing valuable code.
We already have Vagrant for the Rails repository, but we want the same for Android as well, with Chef scripts that will automate the task of installing android and other various stuff. Please check the Vagrantfile and the relevant Chef cookbooks for an idea.
Challenges:
Maven with its multi-module project setup is currently producing a lot of pain. We want to move away from the multi-module setup (related to #11), and also check moving from Maven to Gradle.
Goals:
Idea is to structure the build as follows:
The errors displayed when a user logs in or fails to sync aren't informative to enable a user decide the next course of action. This fix addresses the following list of errors displayed in the current version.
Currently we're not tracking Code Quality metrics in any stage. We need to add that as a maven task so that we can fail the build whenever code quality goes down.
Tasks:
Robolectric 1.x is deprecated, we need to move to Robolectric 2.x for Android unit tests.
The project has now been simplified to a single-module (single pom.xml) project. Previously it was one parent with two child projects which caused a lot of IDE issues.
This makes it easier to move from Maven to Gradle. We already spiked on Gradle and here are the observations:
Firefox is taking a long time to run the tests in CI. A move to PhantomJS for testing would greatly help development. Capybara has the Poltergeist gem for running tests in PhantomJS.
Objective: Introduce PhantomJS for a few cucumber browser tests. This story is not to port every firefox test into phantomJS, instead please help us with:
Slim is a neat and concise templating framework for Ruby. It is miles better than the default ERB templates used in Ruby/Rails. We'd like to use that for our templates since it makes them more readable and easier to maintain.
Goals:
We also evaluated HAML and Jade. Slim is more concise than both.
The application stores encrypted cookies for 20min. This fix should ensure that sync doesn't fail when server and device have different timestamps.
If your device/client time is off by more than 20mins, the server automatically logs user out. The problem is that by the time client/device acquires the cookie, it's already expired.
Presently the integration tests that we're using on Android use Robotium, which is good but getting very difficult to create and maintain. We want to switch to one of these libraries:
We're presently preferring Calabash, but we also want the integration tests to be more performant, since it takes a long time to run in the emulator.
We also want to get rid of the Multi-module maven project because of the integration test suite, and switch it to a single-module maven project. This will make IDE integration even simpler.
We need to add LogStash and Kibana to the existing Chef provisioner. Steps are as follows:
infrastructure
foldervagrant up prod
to provision a Production virtual machine. You can then keep changing the cookbooks and run vagrant provision prod
to re-provision the VMinfrastructure/site-cookbooks/rapidftr
cookbook for details on where the Log is stored, etc. The logs are usually stored inside /srv/rapidftr/<environment>/shared/log
, and we need to expose all logs in this folderrapidftr
cookbook, just add the relevant configuration files and/or shippers for LogStashThis fix will ensure that the sync process automatically resumes when data connection breaks or changes connectivity mode/network type i.e. LTE, 3G, EDGE, GPRS, etc without the user having to re-initiate it. Currently, when a field worker is syncing and the data connection on their mobile device either breaks or switches between different network types i.e. LTE, 3G, EDGE, GPRS, etc, the process simply stops/exits/hangs and requires the field worker to re-initiate the sync to proceed. Sometimes they have to do this several times before succeeding.
GIVEN that I am a field worker,
WHEN my mobile device is connected to WIFI
AND I am syncing records with the server
AND I change the connection type to LTE, EDGE, GPRS during the sync process
THEN I should be able to view an error message indicating that sync has broken due to network failure
GIVEN that I am a field worker,
WHEN my sync process fails due to data/connection/network failure
AND I am connected to an active data connection (have connectivity)
THEN the sync process should automatically resume on my device
AND I should be able to view the status/progress
Presently the UI uses a lot of hand-coded CSS, which makes it very brittle to modify and build on top of. We'd like to introduce the Zurb Foundation UI framework to make it easier to achieve the same styles.
Right now, we're using encrypted cookies to store the last_access_time and then use it to expire the session. The details are explained in #31. But the session is expired only after 20 minutes. As part of this story, we want to expire the session when browser closes as well.
Developer Notes:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.