Giter Club home page Giter Club logo

planningpoker4azure's Introduction

Planning Poker 4 Azure

Live @ http://planningpoker.duracellko.net/

Overview

Planning Poker web application allows distributed teams to play planning poker using just their web browser and is optimized for mobile. The application does not require any registration at all. Scrum Master simply creates a team and all other members connect to the team. Observer role is supported too. The observer can watch the game, but cannot estimate. This is ideal role for a product owner.

How to play Planning Poker

This guide assumes that you already know what planning poker is about and how to play with real cards. If you need any information about planning poker see the wikipedia page. To play planning poker using this application is very simple. For distributed team a conference call is required as this is not provided by the application.

  1. At first Scrum Master creates new team by entering Team name and Scrum master name.
  2. Then all team members join the team by entering the same Team name and unique member name.
  3. Optionally product owner can join the team by entering the same Team name, unique member name and checking Observer checkbox.
  4. When all participants joined the team, the team can discuss first story.
  5. After discussion Scrum Master starts the estimation.
  6. Then all members pick estimates. Optionally Scrum Master can cancel estimation when any of the members requests that.
  7. After all members picked an estimate, the estimates are shown to all participants.
  8. If concensus is found then team can discuss another story and Scrum Master can start estimation again. Otherwise team discusses their estimates and then Scrum Master starts estimation again.

Planning Poker screenshot

Installation

Requirements:

  • .NET 8.0 runtime

Run: dotnet Duracellko.PlanningPoker.Web.dll

Docker

It is also possible to install the application using Docker image from duracellko/planningpoker repository.

docker pull duracellko/planningpoker
docker run -p 80:8080 duracellko/planningpoker

Architecture

Application is implemented using ASP.NET Core 8.0. Front-end is Single-Page Application implemented using Blazor. This technology allows deployment to different environments:

  • Locally on Windows or Linux
  • In Docker container
  • In Azure AppService
  • or any environment supported by ASP.NET Core

The application does not have any dependencies to run in basic mode. However, there are configurable advanced features.

Blazor models

Blazor supports multiple rendering modes including Client-side and Server-side. It is possible to simply switch between the modes by configuring UseServerSide setting.

Teams storage

By default, when server application is restarted, all teams are lost. It is possible to specify folder to store teams data between application restarts. Team data are stored in JSON format.

Azure Service Bus

The application is state-full (it stores all teams data in memory). Therefore, it is not simple to deploy the application to a web-farm. Each server in web-farm would have different state of team. However, it is possible to setup Azure Service Bus to synchronize state between nodes in web-farm.

Configuration

The application can be configured using default ASP.NET Core configuration sources:

  • appsettings.json
  • appsettings.Environment.json
  • Environment variables
  • Command-line arguments

The application has following configuration settings:

{
    "PlanningPokerClient": {
        "UseServerSide": "Never" // string - Never | Always | Mobile
    },
    "PlanningPoker": {
        "RepositoryFolder": "", // string
        "RepositoryTeamExpiration": 1200, // integer - time in seconds
        "ClientInactivityTimeout": 900, // integer - time in seconds
        "ClientInactivityCheckInterval": 60, // integer - time in seconds
        "WaitForMessageTimeout": 60, // integer - time in seconds

        // Azure Service Bus configuration
        "ServiceBusConnectionString": "", // string
        "ServiceBusTopic": "PlanningPoker", // string
        "InitializationTimeout": 60, // integer - time in seconds
        "InitializationMessageTimeout": 5, // integer - time in seconds
        "SubscriptionMaintenanceInterval": 300, //integer - time in seconds
        "SubscriptionInactivityTimeout": 300 // integer - time in seconds
    }
}
  • UseServerSide (default: Never) - This setting has following options:
    • Always - Blazor runs in server-side and HTML is synchronized with browser using SignalR.
    • Never - Blazor runs in WebAssembly on client.
    • Mobile - Blazor runs on server for mobile devices and on client otherwise. Startup of Blazor can be slow on mobile devices, therefore this option fallbacks to server-side for faster start.
  • RepositoryFolder (default: empty) - Path to folder, where data are stored between application restarts. Path is relative to the application folder. When this setting is empty, no data are stored and all are lost on application restart.
  • RepositoryTeamExpiration (default: 1200) - Team is deleted after specified time with no user activity.
  • ClientInactivityTimeout (default: 900) - User is disconnected from the team after specified time with no connection from the user.
  • ClientInactivityCheckInterval (default: 60) - Time interval to run periodic job that disconnects innactive users.
  • WaitForMessageTimeout (default: 60) - Each client requests regularly for status updates. When there is no change in specified time, client receives response that there is no change and requests for update again. This way client notifies to keep connection is alive.
  • ServiceBusConnectionString (default: empty) - Connection string to Azure Service Bus used to synchronize data between servers in web-farm. For example: Endpoint=myEndpoint;SharedSecretIssuer=mySecret;SharedSecretValue=myPassword;
  • ServiceBusTopic (default: PlanningPoker) - Nodes uses the specified Service Bus topic for communication.
  • InitializationTimeout (default: 60) - Time after initialization phase is cancelled and server assumes that it is alone. This timeout should not be reached, because InitializationMessageTimeout is shorter.
  • InitializationMessageTimeout (default: 5) - Timeout to wait for message from another node during initialization phase. When the timeout is reached, server contacts another node or assumes that it is alone in web-farm.
  • SubscriptionMaintenanceInterval (default: 300) - Time interval to do periodic check, which nodes in web-farm are responding.
  • SubscriptionInactivityTimeout (default: 300) - Service Bus subcsriptions are deleted for nodes, which do not respond in the specified time.

Buid and test

Requirements:

  • .NET SDK 8.0

To run build and tests simply execute PowerShell script BuildAndRun.ps1.

.\BuildAndRun.ps1

Optionally it is possible to include execution of end-2-end tests using Selenium.

.\BuildAndRun.ps1 -E2ETest:$true

Run in Visual Studio

PlanningPokerCore.sln solution can be normally open, built and debugged in Visual Studio 2022. Also unit tests can be executed.

For end-2-end tests (Duracellko.PlanningPoker.E2ETest) Playwright dependencies (browser) need to be installed. Simply execute following commands:

.\Build\bin\Debug\net8.0\playwright.ps1 install chromium

Solution projects

PlanningPoker solution contains following projects:

  • PlanningPoker.Domain contains domain classes of the application. This includes domain logic and entities e.g. ScrumMaster, Estimation.
  • PlanningPoker implements host of domain objects, JSON web service and file-system repository.
  • PlanningPoker.Service implements DTOs shared between server and client.
  • PlanningPoker.Web is host application. It starts ASP.NET Core hosting, dependency injection and loads configuration.
  • PlanningPoker.Client is Blazor SPA client. It containes 2 pages, Blazor components and communication with the server.
  • PlanningPoker.Azure contains modified host of domain objects used on Windows Azure platform. Additionally it implements communication between cloud instances using Service Bus.
  • PlanningPoker.Redis contains extension to use Redis PubSub instead of Azure Service Bus.
  • PlanningPoker.Domain.Test contains unit-tests of domain classes.
  • PlanningPoker.Test contains unit-tests of PlanningPoker project classes.
  • PlanningPoker.Client.Test contains unit-tests of client application.
  • PlanningPoker.Azure.Test contains unit-tests of classes in PlanningPoker.Azure project.
  • PlanningPoker.E2ETest contains end-2-end tests of full system. Tests are implemented using Selenium and tests mostly Chrome browser and partially Firefox.

Attributions

This application including source code can be used under MIT License.

planningpoker4azure's People

Contributors

duracellko avatar ohaz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

planningpoker4azure's Issues

Problem with dotnet running the application

Hello @duracellko Rastislav
The application works well running from the docker container as well as when it is being run from the visual studio.
Problem appears when I try to build it using either attached powershell or debug/release configurations. While starting it everything looks green and normal with console output of
info: Microsoft.Hosting.Lifetime[0] Now listening on: http://localhost:5000 info: Microsoft.Hosting.Lifetime[0] Now listening on: https://localhost:5001 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Production info: Microsoft.Hosting.Lifetime[0]

But running the page ends up with

Loading...
An error has occurred. This application may no longer respond until reloaded.

If you have any immediate suggestion about debugging it or running it I would appreciate them.
best regards

How to set RepositoryFolder as environmental variable in docker-compose

Could you give me a hint how to do it correctly?

My docker-compose:

services:
planningpoker:
image: duracellko/planningpoker
container_name: planningpoker
network_mode: host
environment:
RepositoryFolder: "/planningpoker"
user: "1002:100"
restart: unless-stopped

Thanks a lot for your support!!!

Website does not appear to work with IOS browers

When you access the website, even you own example one on the web, within IOS, none of the browsers will display the page, they get to the "loading" screen but never complete to the game screen.

Windows 10 Internet Explorer also has the same issue but not Chrome or Edge although I think that has recently started using the Chromium engine.

Thanks, great program, exactly what I wanted.

John

Usability question: Finish voting manually

Hi there,

I'm really enjoying your work. I'm curious, if there is a possibility for the Scrum Master to close the voting and show the results, even if not everybody has voted yet? That would be neat for my usecase.

Add support for translations

Lot of user interface strings are directly in HTML templates. All UI strings should be in resx files to support translations.

Scrum team does not exist

Hi, I've been using the tool for some time, but in the last two weeks some colleagues are not able to join the estimation rooms.

I'm creating the room from Germany and the teammates from India see the following error when joining:
error

The same issue happen to me when they create the room from India.

Do you know what could cause this?

More items :-)

Thanks for fixing the iphone issue, brilliant, can I suggest another couple of edits...

  1. When a Scrum Master comes back after closing the browser, you cannot go back in as the SM only a member and so you need to start a new session.
  2. When the members choose their estimates, it would be great to have a tick appear on their name on the left as well as the card on the right as you need to try to reconcile this if someone has not provided their estimate.

Thanks again, this is brilliant.

404 for most of the files in newer version (docker + nginx proxy)

Hi, I'm having an issue.

I've been running duracellko/planningpoker:b1646 for a long while and it worked like a charm.
Recently I tried to update to a newer version and I get the same result everytime.
My setup is: nginx proxy (for https and subdomains) -> docker (with -p 12345:8080) -> planningpoker
When connecting to the app directly via HTTP and port 12345, everything works like a charm.
When connecting to the nginx proxy via https, the issue appears:
The first few files load perfectly (with http status code 200). Around when it starts trying to load the .dll files, all files return 404.

Just for good measure, this is my nginx config:

server {​​​​​​​
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name my.example.com;
        location / {​​​​​​​
                proxy_pass http://127.0.0.1:12345;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto https;
                proxy_redirect    off;
        }​​​​​​​
...certificates...
}

Is there anything I can do to fix this?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.