Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
agent
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
7
Merge Requests
0
Wiki
Members
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
Commit
c163ce58
authored
Jul 28, 2014
by
Őry Máté
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add windows client
parent
a634f5ce
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
100 additions
and
16 deletions
+100
-16
client.pyw
+17
-0
notify.py
+83
-16
No files found.
client.pyw
0 → 100644
View file @
c163ce58
# Open urls in default web browser provided by circle agent
# Part of CIRCLE project http://circlecloud.org/
# Should be in autostart and run by the user logged in
import
logging
logger
=
logging
.
getLogger
()
fh
=
logging
.
FileHandler
(
"agent-client.log"
)
formatter
=
logging
.
Formatter
(
"
%(asctime)
s -
%(name)
s [
%(levelname)
s]
%(message)
s"
)
fh
.
setFormatter
(
formatter
)
logger
.
addHandler
(
fh
)
from
notify
import
run_client
if
__name__
==
'__main__'
:
run_client
()
notify.py
View file @
c163ce58
...
...
@@ -16,7 +16,9 @@ import subprocess
import
urllib2
logger
=
logging
.
getLogger
()
logger
.
debug
(
"notify imported"
)
file_name
=
"vm_renewal.json"
win
=
platform
.
system
()
==
"Windows"
def
parse_arguments
():
...
...
@@ -40,7 +42,7 @@ def get_temp_dir():
def
wall
(
text
):
if
platform
.
system
()
==
"Windows"
:
if
win
:
return
if
text
is
None
:
logger
.
error
(
"Incorrect function call"
)
...
...
@@ -67,7 +69,6 @@ def accept():
req
=
urllib2
.
Request
(
url
,
""
,
{
"accept"
:
"application/json"
,
"referer"
:
url
,
"x-csrftoken"
:
token
})
# "content-type": "application/x-www-form-urlencoded"})
rsp
=
opener
.
open
(
req
)
data
=
json
.
load
(
rsp
)
newtime
=
data
[
"new_suspend_time"
]
...
...
@@ -82,22 +83,35 @@ def accept():
def
notify
(
url
):
file_path
=
os
.
path
.
join
(
get_temp_dir
(),
file_name
)
if
file_already_exists
(
file_path
):
os
.
remove
(
file_path
)
if
file_already_exists
(
file_path
):
raise
Exception
(
"Couldn't create file
%
s as new"
%
file_path
)
with
open
(
file_path
,
"w"
)
as
f
:
json
.
dump
(
url
,
f
)
wall
(
"This virtual machine is going to expire! Please type
\n
"
" vm_renewal
\n
"
"command to keep it running."
)
p
=
multiprocessing
.
Process
(
target
=
open_in_browser
,
args
=
(
url
,
))
p
.
start
()
try
:
logger
.
debug
(
"notify(
%
s) called"
,
url
)
if
win
:
logger
.
info
(
"notifying
%
d clients"
,
len
(
clients
))
for
c
in
clients
:
logger
.
debug
(
"sending url
%
s to client
%
s"
,
url
,
unicode
(
c
))
c
.
sendLine
(
url
.
encode
())
else
:
file_path
=
os
.
path
.
join
(
get_temp_dir
(),
file_name
)
if
file_already_exists
(
file_path
):
os
.
remove
(
file_path
)
if
file_already_exists
(
file_path
):
raise
Exception
(
"Couldn't create file
%
s as new"
%
file_path
)
with
open
(
file_path
,
"w"
)
as
f
:
json
.
dump
(
url
,
f
)
wall
(
"This virtual machine is going to expire! Please type
\n
"
" vm_renewal
\n
"
"command to keep it running."
)
logger
.
debug
(
"wall sent, trying to start browser"
)
p
=
multiprocessing
.
Process
(
target
=
open_in_browser
,
args
=
(
url
,
))
p
.
start
()
except
:
logger
.
exception
(
"Couldn't notify about
%
s"
%
url
)
def
open_in_browser
(
url
):
if
platform
.
system
()
!=
"Windows"
:
if
not
win
:
display
=
search_display
()
if
display
:
display
,
uid
,
gid
=
display
...
...
@@ -113,7 +127,7 @@ def open_in_browser(url):
webbrowser
.
open
(
url
,
new
=
2
,
autoraise
=
True
)
def
file_already_exists
(
name
,
mode
=
0644
):
def
file_already_exists
(
name
,
mode
=
0
o
644
):
"""Return whether file already exists, create it if not.
Other errors are silently ignored as the file will be reopened anyways.
...
...
@@ -152,6 +166,59 @@ def search_display():
continue
return
None
if
win
:
from
twisted.internet
import
protocol
from
twisted.protocols
import
basic
clients
=
set
()
port
=
25683
class
PubProtocol
(
basic
.
LineReceiver
):
def
__init__
(
self
,
factory
):
self
.
factory
=
factory
def
connectionMade
(
self
):
logger
.
info
(
"client connected:
%
s"
,
unicode
(
self
))
clients
.
add
(
self
)
def
connectionLost
(
self
,
reason
):
logger
.
info
(
"client disconnected:
%
s"
,
unicode
(
self
))
clients
.
remove
(
self
)
class
PubFactory
(
protocol
.
Factory
):
def
__init__
(
self
):
clients
.
clear
()
def
buildProtocol
(
self
,
addr
):
return
PubProtocol
(
self
)
def
register_publisher
(
reactor
):
reactor
.
listenTCP
(
port
,
PubFactory
(),
interface
=
'localhost'
)
class
SubProtocol
(
basic
.
LineReceiver
):
def
lineReceived
(
self
,
line
):
print
"received"
,
line
open_in_browser
(
line
)
class
SubFactory
(
protocol
.
ReconnectingClientFactory
):
def
buildProtocol
(
self
,
addr
):
return
SubProtocol
()
def
run_client
():
from
twisted.internet
import
reactor
print
"connect to localhost:
%
d"
%
port
reactor
.
connectTCP
(
"localhost"
,
port
,
SubFactory
())
reactor
.
run
()
else
:
def
register_publisher
(
reactor
):
pass
def
main
():
args
=
parse_arguments
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment