@@ -99,7 +99,7 @@ def start_container(request, container_id):
99
99
return redirect ('containers' )
100
100
101
101
@login_required
102
- def create_container (request ):
102
+ def new_container (request ):
103
103
try :
104
104
with docker_client () as client :
105
105
containers = client .containers .list (all = True )
@@ -112,6 +112,18 @@ def create_container(request):
112
112
}
113
113
)
114
114
115
+ def create_container (request ):
116
+ try :
117
+ with docker_client () as client :
118
+ client .containers .run (request .POST ['image_name' ], request .POST ['command' ], detach = True )
119
+ # client.containers.run(request.POST['image_name'], request.POST['command'], request.POST['kwargs'])
120
+ except :
121
+ messages .add_message (request , messages .ERROR , 'The request could not be processed' )
122
+ return redirect ('containers' )
123
+
124
+ messages .add_message (request , messages .SUCCESS , 'Container successfully created' )
125
+ return redirect ('containers' )
126
+
115
127
@login_required
116
128
def stop_container (request , container_id ):
117
129
with docker_client () as client :
@@ -140,10 +152,15 @@ def container_detail(request, container_id):
140
152
return redirect ('docker_not_running' )
141
153
142
154
with get_container (container_id ) as container_data :
155
+ finished_at_date = container_data .attrs ['State' ]['FinishedAt' ][:10 ]
156
+ finished_at_time = container_data .attrs ['State' ]['FinishedAt' ][11 :19 ]
157
+ finished_at = calculate_time_difference (finished_at_date , finished_at_time )
158
+
143
159
return render (request , 'clusters/containers.html' , {
144
160
'request' : request ,
145
161
'containers' : containers ,
146
162
'container_data' : container_data ,
163
+ 'finished_at' : finished_at
147
164
}
148
165
)
149
166
@@ -212,7 +229,12 @@ def signin(request):
212
229
213
230
@login_required
214
231
def docker_not_running (request ):
215
- return render (request , 'clusters/docker_not_running.html' , {'request' : request })
232
+ try :
233
+ with docker_client () as client :
234
+ client .ping ()
235
+ return redirect ('index' )
236
+ except :
237
+ return render (request , 'clusters/docker_not_running.html' , {'request' : request })
216
238
217
239
@contextmanager
218
240
def docker_client ():
@@ -230,3 +252,31 @@ def get_container(container_id):
230
252
client = docker .from_env ()
231
253
container = client .containers .get (container_id )
232
254
yield container
255
+
256
+ from datetime import datetime
257
+
258
+ def calculate_time_difference (date , time ):
259
+ # Convert the date and time string to a datetime object
260
+ datetime_input = datetime .strptime (f'{ date } { time } ' , '%Y-%m-%d %H:%M:%S' )
261
+
262
+ # Get the current date and time
263
+ now = datetime .now ()
264
+
265
+ # Calculate the time difference
266
+ time_difference = now - datetime_input
267
+
268
+ # Calculate days, hours, and minutes
269
+ days = time_difference .days
270
+ hours , seconds = divmod (time_difference .seconds , 3600 )
271
+ minutes , _ = divmod (seconds , 60 )
272
+
273
+ # Determine how to display the time difference
274
+ if days > 0 :
275
+ result = f'{ days } days ago'
276
+ elif hours > 0 :
277
+ result = f'{ hours } hours ago'
278
+ else :
279
+ result = f'{ minutes } minutes ago'
280
+
281
+ return result
282
+
0 commit comments