Mosaicme is a Microservice application that retrieves images from selected Twitter feeds, stores them on an object store, and then it process them to build a mosaic based on a selected set of pictures.
The MosaicMe application is a demo application to showcase how to design, build, and deploy a MicroService application. We have followed the best practices shared by the 12 Factor App manifest and best of breed DevOps practices to showcase how to do continuous integration (CI) and Continuous Deployment (CD) to automate the deployment of the application. The application includes the following:
- Use of Linux containers to host each service.
- Use of Object stores.
- Restful APIs as communication Channel (REST, S3, SWIFT, HDFS)
- Use of External Services like Twitter and Twilio)
- Automated deployment model
- Use of a Logging Router
- Use of Queuing, Caching and Configuration Services
- Use of Haddop to calculate statistics
- Use of Puppet/Chef to deploy the application
For installation instructions click Here
The following section provides an overview of the Use Cases for MosaicMe. There are two main actors for this application only one actor for this application, the end-user:
Use Case | Description | Completed |
---|---|---|
Retrieve images from Twitter feeds (Hashtags) | MosaicMe retrieves images from the defined list of Twitter hashtags and stores them in the Object store. The pictures are used to build the image library that will be used for building each mosaic. the EMC Code and EMCWorld twitter accounts. | Yes |
Process a mosaic from a submitted picture | MosaicMe monitors a Twitter hashtag (#MosaicMe) for pictures. Once a picture is detected, it will build a mosaic from the submitted picture using the stored pictures in the object store. | Yes |
Tweet Mosaic to Twitter Account | MosaicMe will Tweet the mosaic to the person that tweeted to the selected Twitter hashtag (#MosaicMe) | Yes |
Display list Mosaics | Shows the list of mosaics currently stored in the system. The data will be available via the Web UI, API and ECS. | Yes |
View and Zoom into Mosaic | Select a mosaic, display mosaic in a full screen and provide ability to zoom into the mosaic to view in detail, the raw pictures used for the composition. | Yes |
Configure Mosaicme | Enables administrator to configure the system via a web interface. | No |
Mosaicme statistics | Generates a list of statistics based on usage, storage, and images. meta data. Will use a Haddop cluster to process the stadistics. | No |
Mosaicme is composed of multiple tiers. The following design shows the high level application architecture: The following diagram shows Mosaicme high level architecture:
The following has an overview of each one of the components:
Component Name | Component Description | Completed |
---|---|---|
Web Interface | Web Interface to for displaying pictures, mosaics, statistics and system configuration. | Yes |
Mosaic processing service | Mosaic processing service. Takes the mosaic generation request from the Orchestration API and generates the mosaic data and meta data. | Yes |
Queuing Service | Service to host the queues required by the system. | Yes |
Twitter retrieval service | Service that retrieves pictures and their meta data from the selected twitter accounts and adds them Object store. | Yes |
Statistics Service | Haddop Cluster that takes the data in the Object Store and processes the statistics. Stores the data back to the Object store using HDFS. | No |
Caching Service | Data caching service to speed the Web application. | Yes |
Log Routing Service | Service to route all services logs to the Object Store. | No |
Configuration & registry Service | Service to maintain configuration, synchronization and naming registry. | No |
For More information about the MosaicMe application Architecture click Here
##Contributing to MosaicMe
The MosaicMe project has been licensed under the MIT License. In order to contribute to the MosaicMe project you will need to do two things:
- License your contribution under the DCO + MIT
- Identify the type of contribution in the commit message
As part of the contribution, in the code comments (or license file) associated with the contribution must include the following:
“The MIT License (MIT)
Copyright (c) [Year], [Company Name (e.g., EMC Corporation)]
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
This code is provided under the Developer Certificate of Origin- [Insert Name], [Date (e.g., 1/1/15]”
For example:
A contribution from Joe Developer, an independent developer, submitted in May 15th of 2015 should have an associated license (as file or/and code comments) like this:
“The MIT License (MIT)
Copyright (c) 2015, Joe Developer
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
This code is provided under the Developer Certificate of Origin- Joe Developer, May 15th 2015”
In addition to identifying an open source license in the documentation, all Git Commit messages associated with a contribution must identify the type of contribution (i.e., Bug Fix, Patch, Script, Enhancement, Tool Creation, or Other).
MosaicME is licensed under the MIT license:
“The MIT License (MIT)
Copyright (c) 2015, EMC Corporation
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please file bugs and issues at the Github issues page. For more general discussions you can contact the EMC Code team at Google Groups or tagged with EMC on Stackoverflow.com. The code and documentation are released with no warranties or SLAs and are intended to be supported through a community driven process.