Skip to content
Snippets Groups Projects
Commit dc90e62f authored by Brian Moe's avatar Brian Moe
Browse files

Changed format of dates to be "G####" instead of date based.

Changed uid to graceid, since it's not a uid.
Requires database change:
    ALTER TABLE gracedb_event DROP INDEX uid
parent 267eb442
No related branches found
No related tags found
No related merge requests found
......@@ -11,15 +11,15 @@ def issueAlert(event, location):
issueEmailAlert(event, location)
def issueEmailAlert(event, location):
subject = "[gracedb] New %s event. ID: %s" % (event.get_analysisType_display(), event.uid)
subject = "[gracedb] New %s event. ID: %s" % (event.get_analysisType_display(), event.graceid())
message = """
New Event
%s / %s
UID: %s
GRACEID: %s
Location: %s
TWiki Page: %s
"""
message %= (event.group.name, event.get_analysisType_display(), event.uid, location, event.wikiurl())
message %= (event.group.name, event.get_analysisType_display(), event.graceid(), location, event.wikiurl())
fromaddress = settings.ALERT_EMAIL_FROM
to = settings.ALERT_EMAIL_TO
send_mail(subject, message, fromaddress, to)
......@@ -45,7 +45,7 @@ def issueXMPPAlert(event, location):
stdout=null,
stderr=STDOUT,
env=env)
msg = createPayload(event.uid, location)
msg = createPayload(event.graceid(), location)
p.stdin.write(msg)
p.stdin.close()
for i in range(1,10):
......@@ -61,7 +61,7 @@ def issueXMPPAlert(event, location):
# resource = "sender"
# password = "w4k3upal1ve"
# node = "cbc_mbta_online"
# voevent = createPayload(event.uid, location)
# voevent = createPayload(event.graceid(), location)
#
# myjid=JID(username+"@"+server+"/"+resource)
# recpt=JID("pubsub."+server)
......
......@@ -17,8 +17,8 @@ class EventSearchForm(forms.Form):
submitterList = User.objects.filter(id__in=submitterIds).order_by('name')
submitterChoices = [("","")]+ [ (u.id, u.name) for u in submitterList]
uidStart = forms.CharField(required=False)
uidEnd = forms.CharField(required=False)
graceidStart = forms.CharField(required=False)
graceidEnd = forms.CharField(required=False)
group = forms.ChoiceField(choices=groupChoices, required=False)
type = forms.ChoiceField(choices=typeChoices, required=False)
submitter = forms.ChoiceField(choices=submitterChoices, required=False)
......
......@@ -14,42 +14,6 @@ def intToLetters( i, str='' ):
else:
return intToLetters( i/26, string.lowercase[i%26] + str )
class Genid:
# XXX dear heaven this is awful.
def __init__(self):
self.lastCalledDate = datetime.datetime.now().date()
# XXX Find latest suffix from Event table
self.next = 0
self.lock = thread.allocate_lock()
prefix = self.lastCalledDate.strftime('%y%m%d')
plen = len(prefix)
analyses = Event.objects.filter(uid__contains=prefix)
if len(analyses) >0:
self.next = 1 + max([lettersToInt(a.uid[plen:]) for a in analyses])
def __call__(self):
self.lock.acquire()
today = datetime.datetime.now().date()
assert (today >= self.lastCalledDate)
if today != self.lastCalledDate:
self.next = 0
self.lastCalledDate = today
prefix = datetime.datetime.now().strftime('%y%m%d')
rv = prefix + intToLetters(self.next)
self.next += 1
self.lock.release()
return rv
# XXX Yarg.
_genid = None
def genid():
global _genid
if not _genid: _genid = Genid()
return _genid()
class User(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
......@@ -83,20 +47,30 @@ class Event(models.Model):
("CWB", "CWB"),
("MBTA", "MBTA Online"),
)
uid = models.CharField(max_length=20, unique=True, default=genid)
submitter = models.ForeignKey(User)
created = models.DateTimeField(auto_now_add=True)
group = models.ForeignKey(Group)
analysisType = models.CharField(max_length=20, choices=ANALYSIS_TYPE_CHOICES)
# XXX Deprecated. Only useful for old test data.
# Remove this when it won't freak people out to lose
# old date encoded uids.
uid = models.CharField(max_length=20, unique=False, default="")
def graceid(self):
if self.uid:
return self.uid
return "G%04d" % self.id
def weburl(self):
return "https://ldas-jobs.phys.uwm.edu/gracedb/data/%s" % self.uid
return "https://ldas-jobs.phys.uwm.edu/gracedb/data/%s" % self.graceid()
def wikiurl(self):
return "https://www.lsc-group.phys.uwm.edu/twiki/bin/view/Sandbox/%s" % self.uid
return "https://www.lsc-group.phys.uwm.edu/twiki/bin/view/Sandbox/%s" % self.graceid()
def clusterurl(self):
#return "pcdev1.phys.uwm.edu:/archive/gracedb/data/%s" % self.uid
return "file://pcdev1.phys.uwm.edu/archive/gracedb/data/%s" % self.uid
#return "pcdev1.phys.uwm.edu:/archive/gracedb/data/%s" % self.graceid()
return "file://pcdev1.phys.uwm.edu/archive/gracedb/data/%s" % self.graceid()
def ligoApproved(self):
return self.approval_set.filter(approvingCollaboration='L').count()
......
......@@ -27,43 +27,56 @@ def create(request):
form = CreateEventForm()
else:
form = CreateEventForm(request.POST, request.FILES)
saved = False
if form.is_valid():
group = Group.objects.filter(name=form.cleaned_data['group'])
type = form.cleaned_data['type']
# Create Event
event = Event()
event.submitter = request.ligouser
event.group = group[0]
event.analysisType = type
# Create data directory/directories
# Save uploaded file.
dirPrefix = "/mnt/gracedb-web/data"
eventDir = os.path.join(dirPrefix, event.uid)
os.mkdir( eventDir )
os.mkdir( os.path.join(eventDir,"private") )
os.mkdir( os.path.join(eventDir,"general") )
#os.chmod( os.path.join(eventDir,"general"), int("041777",8) )
os.chmod( os.path.join(eventDir,"general"), 041777 )
f = request.FILES['eventFile']
uploadDestination = os.path.join(eventDir, "private", f.name)
fdest = open(uploadDestination, 'w')
# XXX probably want to check exit code
# Oh. and it doesn't work.
os.system("/usr/bin/sudo /usr/local/bin/fixgracedirs %s >/dev/null" % event.uid)
#fdest.write("[%s] %s bytes\n" % (f.name, f.size))
# Save uploaded file into user private area.
for chunk in f.chunks():
fdest.write(chunk)
fdest.close()
# Create WIKI page
createWikiPage(event.uid)
event.save() # if everything worked... save.
# Send an alert.
issueAlert(event, os.path.join(event.clusterurl(), "private", f.name))
#return HttpResponseRedirect(reverse(view, args=[event.uid]))
try:
group = Group.objects.filter(name=form.cleaned_data['group'])
type = form.cleaned_data['type']
# Create Event
event = Event()
event.submitter = request.ligouser
event.group = group[0]
event.analysisType = type
# ARGH. We don't get a graceid until we save,
# but we don't know in advance if we can actually
# create all the things we need for success!
# What to do?!
event.save()
saved = True # in case we have to undo this.
# Create data directory/directories
# Save uploaded file.
dirPrefix = "/mnt/gracedb-web/data"
eventDir = os.path.join(dirPrefix, event.graceid())
os.mkdir( eventDir )
os.mkdir( os.path.join(eventDir,"private") )
os.mkdir( os.path.join(eventDir,"general") )
#os.chmod( os.path.join(eventDir,"general"), int("041777",8) )
os.chmod( os.path.join(eventDir,"general"), 041777 )
f = request.FILES['eventFile']
uploadDestination = os.path.join(eventDir, "private", f.name)
fdest = open(uploadDestination, 'w')
# XXX probably want to check exit code
# Oh. and it doesn't work.
os.system("/usr/bin/sudo /usr/local/bin/fixgracedirs %s >/dev/null" % event.graceid())
#fdest.write("[%s] %s bytes\n" % (f.name, f.size))
# Save uploaded file into user private area.
for chunk in f.chunks():
fdest.write(chunk)
fdest.close()
# Create WIKI page
createWikiPage(event.graceid())
# Send an alert.
issueAlert(event, os.path.join(event.clusterurl(), "private", f.name))
#return HttpResponseRedirect(reverse(view, args=[event.graceid()]))
except:
# something went wrong.
if saved:
# undo save.
event.delete()
raise
if 'cli' in request.POST:
msg = str(event.uid)
msg = str(event.graceid())
response = HttpResponse(mimetype='text/xml')
response.write(msg)
response['Content-length'] = len(msg)
......@@ -98,15 +111,29 @@ def search(request):
form = EventSearchForm(request.POST)
if form.is_valid():
objects = Event.objects.all()
start = form.cleaned_data['uidStart']
end = form.cleaned_data['uidEnd']
start = form.cleaned_data['graceidStart']
end = form.cleaned_data['graceidEnd']
submitter = form.cleaned_data['submitter']
groupname = form.cleaned_data['group']
typename = form.cleaned_data['type']
if start:
objects = objects.filter(uid__gte=start)
if start[0] != 'G':
# XXX This is the deprecated uid stuff. Take it out when uid is gone.
objects = objects.filter(uid__gte=start)
objects = objects.filter(uid__startswith="0")
else:
objects = objects.filter(id__gte=int(start[1:]))
objects = objects.filter(uid="")
if end:
objects = objects.filter(uid__lte=end)
if end[0] != 'G':
# XXX This is the deprecated uid stuff. Take it out when uid is gone.
objects = objects.filter(uid__lte=end)
objects = objects.filter(uid__startswith="0")
else:
objects = objects.filter(id__lte=int(end[1:]))
objects = objects.filter(uid="")
if submitter:
objects = objects.filter(submitter=submitter)
if groupname:
......@@ -130,13 +157,13 @@ def search(request):
# Things that aren't views and should really be elsewhere.
#-----------------------------------------------------------------
def createWikiPage(uid):
def createWikiPage(graceid):
twikiroot = "/mnt/htdocs/uwmlsc/secure/twiki/data/Sandbox/"
plainFile = """
Initial Entry for %s
%%TOC{depth="2"}%%
""" % uid
""" % graceid
rcsFile = """head 1.1;
access;
symbols;
......@@ -166,9 +193,9 @@ Initial Entry for %s
%%TOC{depth="2"}%%
@
""" % uid
pname = os.path.join(twikiroot, uid+".txt")
rcsname = os.path.join(twikiroot, uid+".txt,r")
""" % graceid
pname = os.path.join(twikiroot, graceid+".txt")
rcsname = os.path.join(twikiroot, graceid+".txt,r")
f = open(pname, "w")
f.write(plainFile)
f.close()
......
......@@ -41,12 +41,12 @@
<img src="/media/img/admin/icon-no.gif"/>
{% endif %}
</td>
<td>{{ obj.uid }}</td>
<td>{{ obj.graceid }}</td>
<td>{{ obj.submitter }} </td>
<td>{{ obj.group }} </td>
<td>{{ obj.get_analysisType_display }} </td>
<td><a href="{{ obj.weburl }}">Web: {{ obj.uid }}</a></td>
<td><a href="{{ obj.wikiurl }}">Wiki: {{ obj.uid }}</a></td>
<td><a href="{{ obj.weburl }}">Web: {{ obj.graceid }}</a></td>
<td><a href="{{ obj.wikiurl }}">Wiki: {{ obj.graceid }}</a></td>
</tr>
{% endfor %}
</table>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment