The customer is a global technology partner serving corporate legal departments, risk and compliance teams, and HR professionals. The team aimed to modernize their Contract Lifecycle Management application, which involved upgrading several vital components, such as Python2 to Python3, Django 1.6 to Django 3.2, ElasticSearch, and the Django package used with Django 1.6 to versions compatible with Django 3.2.
In addition, for their Analytics platform, the team desired a Jenkins Pipeline that would be triggered automatically when a Pull Request (PR) was submitted and matched a specific pattern in their code repository. Once activated, the pipeline would test cases for both the Spring batch and Flask application, which could result in one of two outcomes: all test cases passed or some/all failed. If all tests passed, no further action would be necessary, but if any test(s) failed, the PR would be declined using the team's credentials.
Finally, the team wanted to create new APIs that would enable them to display visualizations with various charts in their Vue.js application.
To upgrade the older code in the Contract Lifecycle Management application, Thinkitive Technologies assembled a team of engineers who began by scrutinizing every package utilized in the project and tracking them in a spreadsheet. The team also verified if the packages had compatible versions with the newer Django and identified alternative options if they were not compatible. The team created a detailed roadmap based on their findings, aiming to upgrade the project fully, while completing the task as quickly as possible.
Thinkitive Technologies formed a team of DevOps engineers and a Full Stack developer for the Insights and Analytics project. The DevOps engineers explored various Jenkins plugins that could trigger the pipeline whenever a pull request was submitted in Bitbucket and ultimately chose the Bitbucket Push and Pull Request plugin.
The webhook URL was integrated into the Bitbucket repository's settings to initiate the pipeline when a pull request was generated. If all test cases were successful, no further action was taken, but if any test case failed (from either Spring batch or Flask), the pull request would be declined/closed with the credentials specified in the Jenkinsfile.
Meanwhile, the Full Stack developer built APIs in the Flask application that retrieve data from the PostgreSQL database, which was utilized to create graphical visualizations of the data in Vue.js. The Key Performance Indicators for the Frameworks created were exhibited using Line and Bar charts.
Technical Architecture Diagram - Contract Lifecycle Management-Assistant
Technical Architecture Diagram - Insights and Analytics
Contract Lifecycle Management
1. For "Reports" generation, new parameters were added based on which data would be filtered in ElasticSearch.
2. Used 2to3 library to upgrade the codebase from Python 2.7 to Python 3.6.
3. Fixed bugs that would occur during testing the new codebase after the upgrade.
Insights and Analytics
1. The team was exploring which plugin could be used for bitbucket integration with Jenkins.
2. After some research, the team used the Bitbucket Push and Pull Request plugin.
3. The webhook URL for this plugin was added to the repository's settings.
4. Whenever a PR was raised in this repository, it would trigger the pipeline.
5. The pipeline would execute the test cases, and if any test case failed, it would decline/close the PR.
6. New APIs were created in the Flask application that would be consumed in the front end.
7. New charts were added in the Frontend application, which would receive data from the Flask APIs.
Improved compatibility: In the future, the application can take advantage of new features and improvements.
Enhanced security: By upgrading to Python 3.6, we have ensured that the application is secure and up-to-date.
Better performance: The latest version of Elasticsearch (7.1) includes several performance improvements and bug fixes. That leads to faster search queries and better overall performance of the application.
Improved user experience: The latest versions of Django and the Python packages include new features and improvements. This enhanced the user experience, such as better error messages and improved error handling.
Long-term maintainability and Future-proofing: Upgrading to the latest software versions made the application easier to maintain and future-proof.
Developed "Smart Tags" feature for Contract Lifecycle Management, enabling faster creation of Smart Agreements.
Automated declining/closing of Pull Requests using a Jenkins pipeline in Insights and Analytics.
Created graphical visualizations of Contract Lifecycle Management data in the Insights and Analytics platform.
Tools & Technologies
Contract Lifecycle Management-Assistant: Angular, NGINX, Django, Django Rest Framework, Tika, ElasticSearch, TokuMX, Redis, PostgreSQL
Analytics: Spring batch, PostgreSQL, Flask, Vue.js