unknown1-87e4ea391src/site/apt/architecture.apt.vm49-5030unknownunknown@0pdd.com
The specification is still rather vague for now. I haven't written any assumptions here just yet. Let's write them down here as they come up.
DES2611-422bba331src/site/apt/architecture.apt.vm56-5930unknownunknown@0pdd.com
We should have a class diagram here. Ideally, we should have a tool that autogenerates the diagrams at deploy time from text data. However, we haven't decided yet on what this tool should be. Once that's been agreed upon, include the class diagrams right here.
DESunknown261-83965aa4261src/jekyll/_posts/2014/apr/2014-04-01-architecture.md39-4230unknownunknown@0pdd.com
Our data model class diagrams are now generated by Requs and included in the SRS. But, we also need to show the classes and interfaces that involve the other parts of the system, e.g. API infrastructure, UI classes, data persistence classes, etc.
DESunknown1-0c2dd6e71src/site/apt/architecture.apt.vm60-6230unknownunknown@0pdd.com
Let's define the packaging structure of Thindeck. Describe the purposes of each package, the classes and resources that they contain, etc. Include a diagram showing how they are all related.
DESunknown1-8220001d1src/site/apt/architecture.apt.vm68-7130unknownunknown@0pdd.com
So far we don't know what components we're going to use. Let's find out, and document those decisions here. Think about what we're going to need here - APIs for services that we're going to use, code libraries, web framework, etc.
DESunknown1-21a7e6b21src/site/apt/architecture.apt.vm77-7930unknownunknown@0pdd.com
We don't know what the system looks like when it's been deployed. Let's document that here. Stuff that we might need to think about: 1) Web hosting, 2) Code repository (Github, most likely), 3) Data hosting
DESunknown1-4e36e10e1src/site/apt/architecture.apt.vm85-8630unknownunknown@0pdd.com
Requs should automatically generate the use case sequence diagrams. It doesn't support it yet, but when it does, let's include that here.
DESunknown1-0f336fa31src/site/apt/architecture.apt.vm92-9330unknownunknown@0pdd.com
We need to identify the risks associated with this project. Let's document those risks in this section.
DESunknown1-2ac4b43a1src/site/apt/architecture.apt.vm99-10030unknownunknown@0pdd.com
Let's document the architectural and design decisions in this section.
DESunknown1-9b3a63bd1target/site/architecture.html106-10830unknownunknown@0pdd.com
Let's define the packaging structure of Thindeck. Describe the purposes of each package, the classes and resources that they contain, etc. Include a diagram showing how they are all related.
DESunknown239-59e78fdb239src/jekyll/_posts/2014/jun/2014-06-24-component-view.md162-16530unknownunknown@0pdd.com
How should we decide which hostname needs more containers? I'm not sure how to do it. Should be a combination of factors, including data from Meter. It's important to have at least three running containers for any repository.
IMPunknown239-fde3f532239src/jekyll/_posts/2014/jun/2014-06-24-component-view.md172-17430unknownunknown@0pdd.com
How we decide when to start/stop Tanks? I'm not sure how to make such a decision. Should be a combination of factors.
IMPunknown136-94e0aa31136thindeck-cockpit/src/main/webapp/xsl/stats.xsl41-4130unknownunknown@0pdd.com
Create page 'Runtime stats'.
IMPunknown136-59781d81136thindeck-cockpit/src/main/webapp/xsl/welcome.xsl41-4130unknownunknown@0pdd.com
Fill the text of 'how it work' part.
IMPunknown136-1ffa9f73136thindeck-cockpit/src/main/webapp/xsl/welcome.xsl47-4730unknownunknown@0pdd.com
Fill the text of 'Pricing' part.
IMPunknown136-360ecdbc136thindeck-cockpit/src/main/webapp/xsl/welcome.xsl55-5630unknownunknown@0pdd.com
Fill the text of 'Terms of service' part. It might need to create separate page for that
IMPunknown136-c30c85e1136thindeck-cockpit/src/main/webapp/xsl/welcome.xsl63-6430unknownunknown@0pdd.com
Fill the text of 'Terms of service' part. It should be here.
IMPunknown256-65bbc8b6256src/jekyll/_posts/2014/apr/2014-04-01-architecture.md125-12630unknownunknown@0pdd.com
Let's document next set of decisions made, by removing ellipsis, from the above list.
IMPunknown256-25d36e08256src/jekyll/_posts/2014/aug/2014-08-03-packaging.md20-2030unknownunknown@0pdd.com
Add a diagram showing how packages are related.
IMP312293-c68bbdc4293src/main/java/com/thindeck/steps/LoadBalancer.java40-4430unknownunknown@0pdd.com
Let's implement a class Nginx that implements this interface. It should be able to connect via SSH to a server that has Nginx installed. At the minimum, we should be update the Nginx configuration of the server it's connected to. This class will be used primarily for the UpdateLB step. See https://github.com/yegor256/thindeck/issues/303 for more details.
IMP345312-b2cbc220312src/main/java/com/thindeck/steps/Nginx.java67-6830unknownunknown@0pdd.com
Handle case when given host is not yet configured, need to create basic main.conf and hosts.conf files, and add them to ngnix.conf.
IMPunknown345-7e2a1db1345src/main/java/com/thindeck/steps/Nginx.java69-7230unknownunknown@0pdd.com
When a *hosts.conf file is created for a new host, it should be included in nginx.conf so that it can be loaded by the Nginx server. See the explanation in in https://github.com/yegor256/thindeck/issues/347 for more details.
IMPunknown345-8793b688345src/main/java/com/thindeck/steps/Nginx.java73-7930unknownunknown@0pdd.com
Let's handle the file *main.conf, which should contain the server configuration for a given host. The file name is prefixed by the host name, e.g. the host "www.example.com" will have the file name "www.example.com.hosts.conf". If the file doesn't exist yet, we should create it and include it in nginx.conf. If it already exists, we should update it. See the Javadoc above or the explanation in https://github.com/yegor256/thindeck/issues/347 for more details.
IMPunknown345-06272fcc345src/main/java/com/thindeck/steps/Nginx.java71-7830unknownunknown@0pdd.com
Let's handle the file *main.conf, which should contain the server configuration for a given host. The file name is prefixed by the host name, e.g. the host "www.example.com" will have the file name "www.example.com.hosts.conf". If the file doesn't exist yet, we should create it and include it in nginx.conf. If it already exists, we should update it. See the Javadoc above or the explanation in https://github.com/yegor256/thindeck/issues/347 for more details. @checkstyle MultipleStringLiterals (300 lines)
IMPunknown345-f56694d0345src/main/java/com/thindeck/steps/Nginx.java66-7230unknownunknown@0pdd.com
Let's handle the file *main.conf, which should contain the server configuration for a given host. The file name is prefixed by the host name, e.g. the host "www.example.com" will have the file name "www.example.com.main.conf". If the file doesn't exist yet, we should create it and include it in nginx.conf. If it already exists, we should update it. See the Javadoc above or the explanation in https://github.com/yegor256/thindeck/issues/347 for more details.
IMPunknown312-375f6020312src/main/java/com/thindeck/steps/Nginx.java69-7030unknownunknown@0pdd.com
Handle case when given hosts is already in the load balancing group.
IMPunknown312-6fb7b082312src/main/java/com/thindeck/steps/Nginx.java71-7130unknownunknown@0pdd.com
Add a test for this class.
IMPunknown312-8be93123312src/test/java/com/thindeck/steps/NginxTest.java51-5230unknownunknown@0pdd.com
Create a test to check that ngnix process receives HUP signal, after configuration update.
IMP311293-6e4765a2293src/test/java/com/thindeck/steps/UpdateLBTest.java52-5830unknownunknown@0pdd.com
The test is currently ignored for two reasons: 1. The schema memo.xsd does not yet define the domain element. The test will fail because the XML validation will throw an exception. 2. UpdateLB is not yet implemented, which means the verify statements will fail even if the Memo XML is valid. Let's address these issues and enable this test. See Github issue https://github.com/yegor256/thindeck/issues/308 for further details.
IMPunknown311-b0b102b2311src/test/java/com/thindeck/steps/UpdateLBTest.java52-5430unknownunknown@0pdd.com
The test is currently ignored because UpdateLB is not yet implemented. Let's implement it and enable the test. See Github issue https://github.com/yegor256/thindeck/issues/308 for further details.
IMP310291-536f8d9b291src/test/java/com/thindeck/steps/ReadConfigTest.java57-6030unknownunknown@0pdd.com
This test is currently ignored because ReadConfig is not yet implemented. Let's implement it, and have it read the info from the .thindeck.yml file of the repository root and update the Memo XML. See https://github.com/yegor256/thindeck/issues/291 for further details.
IMP369310-82db8b8c310src/main/java/com/thindeck/steps/ReadConfig.java53-5530unknownunknown@0pdd.com
Add check if domains and ports are already in memo. Current implementation duplicates them if step is called several times on the same context.
IMPunknown369-8972f543369src/test/java/com/thindeck/steps/ReadConfigTest.java59-6130unknownunknown@0pdd.com
This unit test additionally checks if step called on the same context does not duplicate domains and ports. It should be put into another unit test, instead.
IMP319289-341cbc3a289pom.xml480-48130unknownunknown@0pdd.com
Increase test code coverage >= 80% for all packages and uncomment lines below.
IMPunknown319-be3482ea319src/test/java/com/thindeck/life/LifecycleTest.java57-5730unknownunknown@0pdd.com
When jcabi-aspects#95 is fixed enable this test.
IMP351319-17808bfb319src/test/java/com/thindeck/life/LifecycleTest.java81-8130unknownunknown@0pdd.com
Migrate to com.thindeck.api.mock classes instead of mockito.
IMPunknown351-ebb2c3b5351src/test/java/com/thindeck/life/LifecycleTest.java81-8330unknownunknown@0pdd.com
Implement MkScenario and MkStep. Rewrite the test after that using mocks from com.thindeck.api.mock package instead of mockito.
IMP5543190IMP319-6d18aceb710-712
Increase code coverage > 30%, by uncommenting the lines below and writting test classes.
pom.xmlYegor Bugayenkoyegor256@gmail.comunknown290-3defbeba290src/main/java/com/thindeck/cockpit/ReposRs.java93-9330unknownunknown@0pdd.com
Add a CasperJS test for adding repositories by user.
IMP322290-ed461ae0290src/main/java/com/thindeck/dynamo/DyBase.java47-4730unknownunknown@0pdd.com
Implement user, repos and txn methods to retrieve data from
IMP372322-31a411b0322src/main/java/com/thindeck/dynamo/DyBase.java47-4730unknownunknown@0pdd.com
Implement txn method to retrieve data from appropriate table.
IMP462372-437563d3372src/main/java/com/thindeck/dynamo/DyTxn.java60-6030unknownunknown@0pdd.com
increment should use actions fetched from item.
IMPunknown462-c5de49b4462src/main/java/com/thindeck/dynamo/DyContext.java45-4630
DyContext.memo() should be implemented. This method should return the Memo object that will use in this context.
IMPoruam85oruam85@gmail.comunknown462-ec070d26462src/main/java/com/thindeck/dynamo/DyContext.java52-5330
DyContext.log() should be implemented. This method should add a new line in the log.
IMPoruam85oruam85@gmail.com464372-6dfa5421372src/test/java/com/thindeck/dynamo/DyBaseTest.java66-6630unknownunknown@0pdd.com
should retrieve DyTxn.
IMPunknown464-b7102912464src/test/java/com/thindeck/dynamo/DyBaseTest.java68-6830unknownunknown@0pdd.com
Remove the @Ignore this when DyTxn is fully implemented.
IMP373322-5e7e33aa322src/main/java/com/thindeck/dynamo/DyRepo.java43-4330unknownunknown@0pdd.com
Implement tasks and memo methods.
IMP405373-67a7ac85373src/main/java/com/thindeck/dynamo/DyRepo.java44-4430unknownunknown@0pdd.com
Implement memo method.
IMPunknown405-d6ee4a6b405src/main/java/com/thindeck/dynamo/DyMemo.java47-4730unknownunknown@0pdd.com
implement update.
IMP406373-e9bbc535373src/main/java/com/thindeck/dynamo/DyTasks.java46-4630unknownunknown@0pdd.com
Implement get and open methods.
IMPunknown406-e0d78f7e406src/main/java/com/thindeck/dynamo/DyTask.java46-4630unknownunknown@0pdd.com
Implement command method.
IMP420406-14dae9d0406src/main/java/com/thindeck/dynamo/DyTask.java47-4730unknownunknown@0pdd.com
Implement scenario method.
IMPunknown420-427af42c420src/main/java/com/thindeck/dynamo/DyScenario.java42-4230unknownunknown@0pdd.com
Implement steps method - example in OnDeploy. Task command will determine steps.
IMPunknown406-b5fe8676406src/main/java/com/thindeck/dynamo/DyTasks.java50-5030unknownunknown@0pdd.com
Implement open method.
IMPunknown373-400c0a90373src/main/java/com/thindeck/dynamo/DyTasks.java47-4730unknownunknown@0pdd.com
Implement all and add methods.
IMPunknown322-1ad9bb23322src/main/java/com/thindeck/dynamo/DyRepos.java43-4330unknownunknown@0pdd.com
Implement iterate method.
IMP370322-123c6c41322src/main/java/com/thindeck/dynamo/DyRepos.java44-4430unknownunknown@0pdd.com
Create test for this class when jcabi/jcabi-dynamo#13 is done.
IMPunknown370-bb822dca370src/main/java/com/thindeck/dynamo/DyRepos.java48-4830unknownunknown@0pdd.com
Create test for #add new repo
IMP374322-75940d12322src/main/java/com/thindeck/dynamo/DyUser.java43-4330unknownunknown@0pdd.com
Implement repos and usage methods.
IMP409374-bb504035374src/main/java/com/thindeck/dynamo/DyUser.java44-5030unknownunknown@0pdd.com
At the moment, the repos() method returns all Repos associated with the Dynamo region, and this is definitely incorrect. I think we need to refactor DyRepos in order to include a user criteria (probably URN) in its constructor, and have DyUser pass it so that it will only return the associated criteria. I'm not completely sure about this design, feel free to implement something else if you think it's wrong. The intuition behind it is that we should only get the repos associated with the current user.
IMPunknown409-272f0225409src/main/java/com/thindeck/api/Repo.java46-4830
Let's add a new method User user(). It should return the User whom the Repo is associated to. Let's also add implementations in the classes that implement this interface.
IMPCarlos Mirandacarlosmiranda@users.noreply.github.com408374-a01072dc374src/main/java/com/thindeck/dynamo/DyUser.java51-5330unknownunknown@0pdd.com
Implement usage method. To do this we need to implement a class DyUsage that implements the Usage interface. This will obtain the usage associated to this user from Dynamo DB.
IMPunknown408-195c40b4408src/main/java/com/thindeck/dynamo/DyUsage.java69-7130
Let's implement the add() method. This method should add the supplied Value to the usage info of the current user. Make sure to include unit tests for this method in DyUsageTest.
IMPCarlos Mirandacarlosmiranda@users.noreply.github.comunknown408-b5d67474408src/main/java/com/thindeck/dynamo/DyUsage.java77-7930
Let's implement the select() method. This method should return the values that fit the given criteria (user and date range). Make sure to include unit tests for this method in DyUsageTest.
IMPCarlos Mirandacarlosmiranda@users.noreply.github.comunknown408-75ca2bde408src/main/java/com/thindeck/dynamo/DyUsage.java85-8730
Let's implement the sum() method. This method should return the aggregate sum of values that fit the given criteria. Make sure to include unit tests for this method in DyUsageTest.
IMPCarlos Mirandacarlosmiranda@users.noreply.github.com410374-c45270af374src/test/java/com/thindeck/dynamo/DyUserTest.java52-5430unknownunknown@0pdd.com
We should create an integration test for DyUser. Let's call it DyUserITCase. It should test whether DyUser can perform its operations on a real (local) Dynamo server. When done, ensure that this puzzle is removed.
IMPunknown410-108e5987410src/test/java/com/thindeck/dynamo/DyUserTestITCase.java45-4530
Implement an integration test for DyUser.repos()
IMPAdam Siemionadam.siemion+github@gmail.comunknown322-7e6f773d322src/test/java/com/thindeck/dynamo/DyBaseTest.java55-5530unknownunknown@0pdd.com
Enable this test when jcabi/jcabi-dynamo#13 is done.
IMP321290-5f41f67f290src/main/java/com/thindeck/dynamo/DyBase.java49-5030unknownunknown@0pdd.com
Add dynamo maven plugin and create IT tests for dynamo based classes.
IMP341321-7e1601a9321src/test/java/dynamo/DyBaseITCase.java51-5430unknownunknown@0pdd.com
DyBase should be implemented to make this test pass. You should make sure the DynamoDB Local has all the required tables, and all methods of all API-classes are implemented in com.thinkdeck.dynamo package
IMPunknown341-7e1601a9341src/test/java/dynamo/DyBaseITCase.java52-5530unknownunknown@0pdd.com
DyBase should be implemented to make this test pass. You should make sure the DynamoDB Local has all the required tables, and all methods of all API-classes are implemented in com.thinkdeck.dynamo package
IMPunknown341-c00e1503341src/test/java/dynamo/DyBaseITCase.java53-5430unknownunknown@0pdd.com
Add definition of tasks table to dynamoDb local and remove Ignore annotation.
IMPunknown491-fa4a100f491src/test/java/com/thindeck/dynamo/DyTasksTest.java81-8215
Unignore following test when #492 is finished and check the test passes
IMPArtem Nakonechnywentwog@gmail.com5554600IMP460-15412ba6722-722
add EqualsAndHashCode verifier, e.g. http://www.jqno.nl/equalsverifier/
pom.xmlYegor Bugayenkoyegor256@gmail.com