-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdev_architecture_overview.html
More file actions
184 lines (141 loc) · 6.08 KB
/
dev_architecture_overview.html
File metadata and controls
184 lines (141 loc) · 6.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Smeedee - A management tool for agile projects</title>
<link rel="stylesheet" type="text/css" href="css/styles.css" />
</head>
<body>
<div id="stripes"></div>
<div id="wrap">
<div id="menu">
<dl>
<dt><a href="index.html">Home</a></dt>
<dt><a href="doc_screenshots.html">Screenshots</a></dt>
<dt><a href="download.html">Download</a></dt>
<dt><a href="doc_faq.html">FAQ</a></dt>
<dt><a href="doc_start.html">Documentation</a></dt>
<dt><a href="doc_contact.html">Contact</a></dt>
</dl>
<div id="logo"></div>
</div>
<div id="illustration">
</div>
<div id="textbox">
<div id="top">
<b class="b5"></b>
<b class="b4"></b>
<b class="b3"></b>
<b class="b2"></b>
<b class="b1"></b>
</div>
<div id="bot">
<b class="b1"></b>
<b class="b2"></b>
<b class="b3"></b>
<b class="b4"></b>
<b class="b5"></b>
</div>
<div id="textcontent">
<div class="contentRight">
<h1>Documentation</h1>
<ul>
<li><a href="doc_faq.html">FAQ</a></li>
<li><a href="doc_troubleshooting.html">Troubleshooting</a></li>
</ul>
<h1>For contributors</h1>
<ul>
<li><a href="dev_getting_started.html">Getting started</a></li>
<li><a href="dev_detailed_intro.html">Detailed introduction</a></li>
<li><a href="dev_architecture_overview.html">Architecture overview</a></li>
</ul>
</div>
<div class="contentLeft">
<h1>Architecture Overview</h1>
<p>
This article explains how the different parts of Smeedee are connected.
After reading this you should be able to roughly understand the overall
structure of Smeedee.
</p>
<p>
Basically, Smeedee is designed to do two things:
<ol>
<li>Get data from external systems by executing integration code wrapped in
tasks.</li>
<li>Show data on the screen through widgets</li>
</ol>
</p>
<p>
The flowchart below shows the overall data flow of Smeedee, and how the
different components are connected.
</p>
<p>
<img src="images/smeedee_data_flow.png" alt="Smeedee Data Flow Diagram" style="width:90%;" />
</p>
<p>
In the diagram there are four distinct parts that are all important in
understanding Smeedee:
</p>
<h3>The Task Scheduler</h3>
<p>
The scheduler is a Windows Service running on the Smeedee Server. The
scheduler is responsible for managing the harvesting of data, as well as
potentially running other server side tasks. The actual data-harvesting is
performed by integration code contained in Tasks. When the Scheduler
starts it loads all the tasks in configured in the database in a plug-in
fashion. Each task is isolated from all the others, and work
independently. An instance of a task tell the scheduler how often thy want
to be run data, and the scheduler keeps track of each task and dispatchs
them for execution according to the interval the task wanted. The task then
goes into whatever system it is designed to harvest from, and fetches data
from there. For example there is a Source Control task that asks Subversion
or TFS for the commit log. The task then translates the data from the
external system into a Domain Model known to Smeedee and stores the
harvested data in the Smeedee Database.
</p>
<h3>The Smeedee Database</h3>
<p>
When data is harvested from an external system, it is stored in the Smeedee
database. The database is a SQLite database that keeps a history of all the
data ever harvested. This data aggregation enables users of the Smeedee
system to present historical data in creative ways. For example trends can
be calculated when historical data is available. For system such as
Subversion, there is already historical data in the external system.
Syncronizing this into Smeedee helps stability and also relieves the
external system, as the Smeedee Database acts as a cache between clients
and the external system: One request from one client does not result in one
request to the external system.
</p>
<p>
Data is translated between a relational model and objects in our domain
model using the NHibernate ORM.
</p>
<h3>The Smeedee Server (Smeedee Web Services)</h3>
<p>
The Smeedee server is a webserver hosted in Internet Information Services
(IIS). The server exposes a series of Web Services that provides access to
the Smeedee Database. The Smeedee Server also provides access to the
Smeedee client.
</p>
<h3>The Smeedee Client</h3>
<p>
The client application is a Silverlight application that runs in the
browser. The client display is composed of a number of widgets running in a
slideshow like manner. Widgets ask the Smeedee server for fresh data from
the database as often as they require. Widgets can combine information from
the entire database to create a visualization of the data. E.g. there is a
widget that shows the latest commits in the source control system. The
Widget shows the commit message, and then combines the Source control data
with user data to show name and picture of the person who performed
the commit. Whenever a person performs a commit to the source control system, the
message along with name and picture will be included in the widget shortly
after.
</p>
</div>
<div class="break"></div>
</div>
</div>
<div id="footer" style="color:#FFF" />
</div>
</body>
</html>