def handle(self, *args, **options):
        now = timezone.now()
        sessions = Session.objects.filter(expire_date__lt=now)
        for session in sessions:
            kill = True
            user_id = session.get_decoded().get('_auth_user_id')

            if user_id is not None:
                logger.debug('session user_id:' +user_id)
                user = VLAB_User.objects.get(id=user_id)
                logger.debug("Logging out User : "******"Course : " + started_vm.vm.course.name)
                    logger.debug("Course auto shutdown period (mins): " + str(started_vm.vm.course.auto_shutdown_after))
                    logger.debug("VM: " + str(started_vm.vm.name))
                    try:
                        os.kill(int(started_vm.no_vnc_pid), signal.SIGTERM)
                    except OSError as e:
                        logger.error('Error stopping NoVNC Client with PID ' + str(started_vm.no_vnc_pid) + str(e))

                    XenClient().stop_vm(started_vm.xen_server, user, started_vm.vm.course.id, started_vm.vm.id)
                    config = Available_Config()
                    config.category = 'TERM_PORT'
                    config.value = started_vm.terminal_port
                    config.save()
                    started_vm.delete()
            
                session.delete()
예제 #2
0
    def handle(self, *args, **options):
        now = timezone.now()
        sessions = Session.objects.filter(expire_date__lt=now)
        for session in sessions:
            kill = True
            user_id = session.get_decoded().get('_auth_user_id')

            if user_id is not None:
                logger.debug('session user_id:' + user_id)
                user = VLAB_User.objects.get(id=user_id)
                logger.debug("Logging out User : "******"Course : " + started_vm.vm.course.name)
                    logger.debug("Course auto shutdown period (mins): " +
                                 str(started_vm.vm.course.auto_shutdown_after))
                    logger.debug("VM: " + str(started_vm.vm.name))
                    try:
                        os.kill(int(started_vm.no_vnc_pid), signal.SIGTERM)
                    except OSError as e:
                        logger.error('Error stopping NoVNC Client with PID ' +
                                     str(started_vm.no_vnc_pid) + str(e))

                    XenClient().stop_vm(started_vm.xen_server, user,
                                        started_vm.vm.course.id,
                                        started_vm.vm.id)
                    config = Available_Config()
                    config.category = 'TERM_PORT'
                    config.value = started_vm.terminal_port
                    config.save()
                    started_vm.delete()

                session.delete()
    def handle(self, *args, **options):
        now = timezone.now()
        sessions = Session.objects.filter(expire_date__lt=now)
        for session in sessions:
            kill = True
            user_id = session.get_decoded().get('_auth_user_id')

            if user_id is not None:
                logger.debug('session user_id:' +user_id)
                user = VLAB_User.objects.get(id=user_id)
                stupid_user = False
                logger.debug("Force shutting down VMs for user : "******"Course : " + started_vm.vm.course.name)
                    logger.debug("Course auto shutdown period (mins): " + str(started_vm.vm.course.auto_shutdown_after))
                    logger.debug("VM: " + str(started_vm.vm.name))
                    time_difference_in_minutes = (now - session.expire_date).total_seconds() / 60
                    logger.debug("VM up after session expiry: " + str(time_difference_in_minutes))
                    if int(time_difference_in_minutes) >= started_vm.vm.course.auto_shutdown_after:
                        cmd = 'kill ' + started_vm.no_vnc_pid
                        p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
                        out, err = p.communicate()
                        if not p.returncode == 0:
                            if 'No such process' not in err.rstrip():
                                raise Exception('ERROR : cannot stop the vm '
                                                '\n Reason : %s' % err.rstrip())
                        XenClient().stop_vm(started_vm.xen_server, user, started_vm.vm.course.id, started_vm.vm.id)
                        config = Available_Config()
                        config.category = 'TERM_PORT'
                        config.value = started_vm.terminal_port
                        config.save()
                        if not started_vm.vm.course.allow_long_running_vms:
                            stupid_user = True
                        started_vm.delete()
                    else:
                        kill = False
                if stupid_user:
                    send_mail("Vital : Illegal usage", 'Hi ' + user.first_name+', \r\n\r\n You did not log off VMs the '
                                                                               'last time you used the vital platform. '
                                                                               'Please read the user manual [wiki] to '
                                                                               'understand how to use the platform. '
                                                                               'Not shutting down VMs will lead to the '
                                                                               'VMs to being corrupted and user being '
                                                                               'blocked. \r\n\r\nVital Admin team',
                              '*****@*****.**', [user.email], fail_silently=False)
                #    Prof Tom was against penalizing students - hence commented. Good man :)
                #    user.is_active = False
                #    activation_code = randint(100000, 999999)
                #    user.activation_code = activation_code
                #    user.save()
                #    blocked = Blocked_User()
                #    blocked.user_id = user.id
                #    blocked.save()
            if kill:
                session.delete()
예제 #4
0
 def handle(self, *args, **options):
     config = None
     try:
         config = Available_Config.objects.get(category='NOTIFICATION_MESSAGE')
     except Available_Config.DoesNotExist as e:
         config = Available_Config()
         config.category = 'NOTIFICATION_MESSAGE'
     config.value = options['message']
     config.save()
     logger.debug('Notification Message set as -' + config.value)
예제 #5
0
 def handle(self, *args, **options):
     two_years = timezone.now() + timezone.timedelta(days=-730)
     users = VLAB_User.objects.filter(created_date__lte=two_years)
     # is there a better way to check if there are VMs running for these users
     for user in users:
         Registered_Course.objects.filter(user_id=user.id).delete()
         user_nets = User_Network_Configuration.objects.filter(user_id=user.id)
         for net in user_nets:
             conf = Available_Config()
             conf.category = 'MAC_ADDR'
             conf.value = net.mac_id
             conf.save()
             net.delete()
         VLAB_User.objects.get(id=user.id).delete()
 def handle(self, *args, **options):
     two_years = timezone.now() + timezone.timedelta(days=-280)
     users = VLAB_User.objects.filter(created_date__gte=two_years)
     # is there a better way to check if there are VMs running for these users
     for user in users:
         Registered_Course.objects.filter(user_id=user.id).delete()
         user_nets = User_Network_Configuration.objects.filter(
             user_id=user.id)
         for net in user_nets:
             conf = Available_Config()
             conf.category = 'MAC_ADDR'
             conf.value = net.mac_id
             conf.save()
             net.delete()
         VLAB_User.objects.get(id=user.id).delete()
    def kill_vnc(self, user):
        for vm in self.registered_courses.course.virtual_machine_set.all():
            try:
                user_vm = vm.user_vm_config_set.get(user_id=user.id)
                logger.debug('Killing VNC for ' + vm.name)
                try:
                    os.kill(int(user_vm.no_vnc_pid), signal.SIGTERM)
                except OSError as e:
                    logger.error('Error stopping NoVNC Client with PID ' +
                                 str(user_vm.no_vnc_pid) + str(e))

                available_conf = Available_Config()
                available_conf.category = 'TERM_PORT'
                available_conf.value = user_vm.terminal_port
                available_conf.save()
                user_vm.delete()
            except User_VM_Config.DoesNotExist:
                pass
예제 #8
0
 def kill_vnc(self, user):
     for vm in self.registered_courses.course.virtual_machine_set.all():
         try:
             user_vm = vm.user_vm_config_set.get(user_id=user.id)
             logger.debug('Killing VNC for ' + vm.name)
             cmd = 'kill ' + user_vm.no_vnc_pid
             p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
             out, err = p.communicate()
             if not p.returncode == 0:
                 if 'No such process' not in err.rstrip():
                     raise Exception('ERROR : cannot stop the vm '
                                     '\n Reason : %s' % err.rstrip())
             available_conf = Available_Config()
             available_conf.category = 'TERM_PORT'
             available_conf.value = user_vm.terminal_port
             available_conf.save()
             user_vm.delete()
         except User_VM_Config.DoesNotExist:
             pass
예제 #9
0
 def handle(self, *args, **options):
     course_id = options['course_id']
     course = Course.objects.get(id=course_id)
     print "Removing course: "+course.name+" (ID:"+ str(course.id) +")"
     print "Removing registered students"
     Registered_Course.objects.filter(course=course).delete()
     print "Removing registered user network configs"
     user_nets = User_Network_Configuration.objects.filter(course=course)
     for net in user_nets:
         conf = Available_Config()
         conf.category = 'MAC_ADDR'
         conf.value = net.mac_id
         conf.save()
         net.delete()
     print "Setting new registration code"
     reg_code = get_random_string(length=8)
     course.registration_code = reg_code
     course.save()
     print "The course has been reset. The new registration code is "+reg_code
예제 #10
0
 def handle(self, *args, **options):
     course_id = options['course_id']
     course = Course.objects.get(id=course_id)
     print "Removing course: "+course.name+" (ID:" + str(course.id) + ")"
     print "Removing registered students"
     Registered_Course.objects.filter(course=course).delete()
     print "Removing registered user network configs"
     user_nets = User_Network_Configuration.objects.filter(course=course)
     for net in user_nets:
         conf = Available_Config()
         conf.category = 'MAC_ADDR'
         conf.value = net.mac_id
         conf.save()
         net.delete()
     print "Removing course network config"
     Network_Configuration.objects.filter(course=course).delete()
     print "Removing course virtual machines"
     Virtual_Machine.objects.filter(course=course).delete()
     Course.objects.get(id=course_id).delete()
     print course.name+" (ID:" + str(course.id) + ")"+" has been deleted"
예제 #11
0
 def handle(self, *args, **options):
     course_id = options['course_id']
     course = Course.objects.get(id=course_id)
     print "Removing course: " + course.name + " (ID:" + str(
         course.id) + ")"
     print "Removing registered students"
     Registered_Course.objects.filter(course=course).delete()
     print "Removing registered user network configs"
     user_nets = User_Network_Configuration.objects.filter(course=course)
     for net in user_nets:
         conf = Available_Config()
         conf.category = 'MAC_ADDR'
         conf.value = net.mac_id
         conf.save()
         net.delete()
     print "Setting new registration code"
     reg_code = get_random_string(length=8)
     course.registration_code = reg_code
     course.save()
     print "The course has been reset. The new registration code is " + reg_code
예제 #12
0
 def handle(self, *args, **options):
     course_id = options['course_id']
     course = Course.objects.get(id=course_id)
     print "Removing course: " + course.name + " (ID:" + str(
         course.id) + ")"
     print "Removing registered students"
     Registered_Course.objects.filter(course=course).delete()
     print "Removing registered user network configs"
     user_nets = User_Network_Configuration.objects.filter(course=course)
     for net in user_nets:
         conf = Available_Config()
         conf.category = 'MAC_ADDR'
         conf.value = net.mac_id
         conf.save()
         net.delete()
     print "Removing course network config"
     Network_Configuration.objects.filter(course=course).delete()
     print "Removing course virtual machines"
     Virtual_Machine.objects.filter(course=course).delete()
     Course.objects.get(id=course_id).delete()
     print course.name + " (ID:" + str(
         course.id) + ")" + " has been deleted"
예제 #13
0
    def handle(self, *args, **options):
        try:
            course_id = options['course_id']
            course = Course.objects.get(id=course_id)
            print "Removing course: "+course.name+" (ID:" + str(course.id) + ")"
            print "Removing registered students"
            Registered_Course.objects.filter(course=course).delete()
            print "Removing registered user network configs"
            user_nets = User_Network_Configuration.objects.filter(course=course)
            for net in user_nets:
                conf = Available_Config()
                conf.category = 'MAC_ADDR'
                conf.value = net.mac_id
                conf.save()
                net.delete()
            print "Removing course network config"
            Network_Configuration.objects.filter(course=course).delete()
            print "Removing course virtual machines"
            Virtual_Machine.objects.filter(course=course).delete()
            Course.objects.get(id=course_id).delete()
            print course.name+" (ID:" + str(course.id) + ")"+" has been deleted"
        except Exception as  e:
            print(e)
            pass

        print("Removing conf and qcow course files")
        for files in os.listdir("/mnt/vlab-datastore/vital/vm_dsk/"):
            #print(files)
            if files.find(str(course_id)) == 3:
                files = "/mnt/vlab-datastore/vital/vm_dsk/" + files
                os.remove(files)

        for files in os.listdir("/mnt/vlab-datastore/vital/vm_conf/"):
            #print(files)
            if files.find(str(course_id)) == 3:
                files = "/mnt/vlab-datastore/vital/vm_conf/" + files
                os.remove(files)

        for files in os.listdir("/mnt/vlab-datastore/vital/vm_conf/clean/"):
            #print(files)
            if files.find(str(course_id)) == 0:
                files = "/mnt/vlab-datastore/vital/vm_conf/clean/" + files
                os.remove(files)

        for files in os.listdir("/mnt/vlab-datastore/vital/vm_dsk/clean/"):
            #print(files)
            if files.find(str(course_id)) == 0:
                files = "/mnt/vlab-datastore/vital/vm_dsk/clean/" + files
                os.remove(files)

        print("Removing dhcpd file")
        try:

            st = "/home/vlab_scp/vmnet_conf/vlab-natdhcp/Nat-" + str(course_id) + ".dhcpd" 
            os.remove(st)
        except Exception as e:
            print(st+":"+str(e))
            pass

        print("Removing vlan interfaces")
        remvlan = "vconfig rem bond0." + str(course_id)
        downvlan = "ip link set dev bond0."+ str(course_id) + " down"
        
        process = subprocess.Popen(downvlan.split(), stdout=subprocess.PIPE)
        output, error = process.communicate()
        print(output)
        process = subprocess.Popen(remvlan.split(), stdout=subprocess.PIPE)
        output, error = process.communicate()
        print(output)
        
        print("Removing iptable rule")
        delrule = "iptables -D FORWARD -i bond0." + str(course_id) + " -s 10." + str(course_id) + ".1.0/24 -j REJECT"
        process = subprocess.Popen(delrule.split(), stdout=subprocess.PIPE)
        output, error = process.communicate()
        print(output)