Let me describe context of the problem:
We've several test-boxes (Server A, Server B, Server C, Server D). At any given time, one server is reserved for 'prod-fix'. That is, one server is exact replica of production server. While other three server are being used for testing.
We have projects targeting different release dates (may, june, july, august..). So, at the start of the year, we designate server for each release. For eg:
Server A will be used for prodfix may release, august release and december release
Server B will be used for july release, September release
and so on.
During a release cycle, the server has to go through several activities. At a high-level:
-. Env needs to be refreshed with latest code from production
- testing team needs to validate that env is setup correctly
- some db synch activities
- then we allow projects to start testing
- functional testing
- regression testing
- integration testing
and so on.
- finally, code is release to production
- right after production release, this server becomes 'prod-fix' because it has the latest code-base.
And the other server that was being used for production-support gets taken down, refreshed and readied for testing of another release and so on.
As you can imagine, we need to coordinate activities/schedule of each server and each release. So, currently we manually draw a calendar.
So, the task is to write a program/script:
that can take input of all the activities that need to be performed and then automatically generate a calendar.
For each activity, the user will specify:
1. activity name
2. Duration (business days and calendar days)
3. Order (should it occur before or after some other activity or can it happen in parallel?)
4. Day constraint (like it has to be done on a Monday of the week)
5. Also, a list of "holidays" (so holidays can be excluded from counting)
6. any specific date constraint for some activity (like this activity must be done on this date.. and accordingly rest of calendar would need to be adjusted).
7. Release Date (hard date when code from a particular release is released to production)
Based on this information, you'd draw up a calendar using all available servers (specified in admin) and generate a release calendar.
Calendar will show:
July release -> server A ->
mar 1 to mar 4: env refresh
mar 5 to mar 20: env validation
mar 21 to mar 25: deployment of test code
mar 26 to mar 30: functional testing
and so on...
Do you think you can help with this? I can share a sample calendar and explain more details over the phone.
*** I think the coding part is trivial; the work is more about thinking a proper (robust, smart, intelligent) algorithm utilizing so many constraints. ****
10 freelancers are bidding on average $14/hour for this job
Hi We are interested in your project and read your [url removed, login to view] have completed 150+ big projects in last 5 years. Please check private message board for details.
I'm interested in this project since i have experience in AI and have done a similar project regarding Shipment Scheduling in the past. Lets have a chat before starting the project.