Esempio n. 1
0
 def get(self):
     uuid = self.request.get('channel') #self.request.get('uuid')
     channel = self.request.get('channel')
     
     # check if the kid channel already has an assigned counselor
     counselors = Counselor.all()
     counselors.filter('status >', 0)
     counselors.filter('channels IN', [channel])
     counselors = counselors.fetch(1)
             
     if len(counselors):
         logging.info('already assigned')
         
         counselor = counselors[0]
         
         # publish the counselor profile
         info = pubnub.publish({
             #'channel' : 'kid-'+ kid,
             'channel': channel,
             'message' : {
                 'type': 'system',
                 'timestamp': '',
                 'payload': {
                     'action': 'counselor',
                     'avatar': 'https://second-friend.appspot.com/counselor/avatar?key='+ counselor.key().name(),
                     'name': counselor.name,
                     'id': counselor.key().name(),
                 }
             }
         })
         
         self.response.headers['Access-Control-Allow-Origin'] = '*'
         self.response.set_status(200)
         self.response.out.write('already assigned')
         return
         
     # add to task queue
     taskqueue.add(queue_name = 'QueueRoute', url = '/route/assign', params = { 
         'uuid': uuid, 
         'channel': channel,
     }, method = 'GET', )
     
     # publish a message
     info = pubnub.publish({
         #'channel' : 'kid-'+ channel,
         'channel': channel,
         'message' : {
             'type': 'status',
             'sender': 'SecondFriend',
             'timestamp': '',
             'payload': 'Hello! You will be assigned to a counselor shortly.',
         }
     })
     
     self.response.headers['Access-Control-Allow-Origin'] = '*'
     self.response.set_status(202)
     self.response.out.write('queued')
Esempio n. 2
0
    def get(self):
        uuid = self.request.get('channel')  #self.request.get('uuid')
        channel = self.request.get('channel')
        purge = self.request.get('purge')  # Counselor.key().name()

        counselor = False
        if purge:
            counselor = Counselor.get_by_key_name(purge)
        else:
            counselors = Counselor.all()
            #counselors.filter('status >', 0)
            #counselors.filter('channels IN', [channel])
            counselors = counselors.fetch(10)

            for c in counselors:
                if channel in c.channels:
                    counselor = c
                    break

        if counselor:
            if not purge and channel in counselor.channels:
                counselor.channels.remove(channel)

            if purge:
                counselor.channels = []

            counselor.put()

            # publish the command
            info = pubnub.publish({
                'channel':
                'counselor-' + counselor.key().name(),
                'message': {
                    'action': 'purge' if purge else 'remove',
                    'uuid': uuid,
                    'channel': channel
                }
            })

        self.response.headers['Access-Control-Allow-Origin'] = '*'
        self.response.set_status(200)
        self.response.out.write('removed')
Esempio n. 3
0
    def get(self):
        uuid = self.request.get('channel') #self.request.get('uuid')
        channel = self.request.get('channel')
        purge = self.request.get('purge') # Counselor.key().name()
        
        counselor = False
        if purge:
            counselor = Counselor.get_by_key_name(purge)
        else:
            counselors = Counselor.all()
            #counselors.filter('status >', 0)
            #counselors.filter('channels IN', [channel])
            counselors = counselors.fetch(10)
        
        
            for c in counselors:
                if channel in c.channels:
                    counselor = c
                    break

        if counselor:
            if not purge and channel in counselor.channels:
                counselor.channels.remove(channel)
            
            if purge:
                counselor.channels = []
                
            counselor.put()
        
            # publish the command
            info = pubnub.publish({
                'channel' : 'counselor-'+ counselor.key().name(),
                'message' : {
                    'action': 'purge' if purge else 'remove',
                    'uuid': uuid,
                    'channel' : channel
                }
            })
        
        self.response.headers['Access-Control-Allow-Origin'] = '*'
        self.response.set_status(200)
        self.response.out.write('removed')
Esempio n. 4
0
    def get(self):
        uuid = self.request.get('channel')  #self.request.get('uuid')
        channel = self.request.get('channel')

        # check available counselors
        counselors = Counselor.all()
        counselors.filter('status >', 0)
        counselors = counselors.fetch(3)

        counselor = counselors[0]

        # assign to counselor with the least channel
        for c in counselors:
            if (len(c.channels) < len(counselor.channels)):
                counselor = c

        # no counselor available
        if not len(counselors):
            logging.info('no counselor available')

            self.response.headers['Access-Control-Allow-Origin'] = '*'
            self.response.set_status(500)
            self.response.out.write('no counselor available')
            return

        # update the counselor model - channels
        if (channel not in counselor.channels):
            counselor.channels.append(channel)
            counselor.put()

        # assign and inform the counselor
        # publish the command for counselor screen
        info = pubnub.publish({
            'channel': 'counselor-' + counselor.key().name(),
            'message': {
                'action': 'create',
                'uuid': uuid,
                'channel': channel
            }
        })

        # publish the counselor profile
        info = pubnub.publish({
            #'channel' : 'kid-'+ kid,
            'channel': channel,
            'message': {
                'type': 'system',
                'timestamp': '',
                'payload': {
                    'action':
                    'counselor',
                    'avatar':
                    'https://second-friend.appspot.com/counselor/avatar?key=' +
                    counselor.key().name(),
                    'name':
                    counselor.name,
                    'id':
                    counselor.key().name(),
                }
            }
        })

        # publish a message
        info = pubnub.publish({
            #'channel' : 'kid-'+ channel,
            'channel': channel,
            'message': {
                'type': 'status',
                'sender': 'SecondFriend',
                'payload': 'You have been assigned a counselor.',
            }
        })

        logging.info(counselor.name)
        logging.info(counselor.key().name())

        self.response.headers['Access-Control-Allow-Origin'] = '*'
        self.response.set_status(200)
        self.response.out.write('assigned')
Esempio n. 5
0
    def get(self):
        uuid = self.request.get('channel')  #self.request.get('uuid')
        channel = self.request.get('channel')

        # check if the kid channel already has an assigned counselor
        counselors = Counselor.all()
        counselors.filter('status >', 0)
        counselors.filter('channels IN', [channel])
        counselors = counselors.fetch(1)

        if len(counselors):
            logging.info('already assigned')

            counselor = counselors[0]

            # publish the counselor profile
            info = pubnub.publish({
                #'channel' : 'kid-'+ kid,
                'channel': channel,
                'message': {
                    'type': 'system',
                    'timestamp': '',
                    'payload': {
                        'action':
                        'counselor',
                        'avatar':
                        'https://second-friend.appspot.com/counselor/avatar?key='
                        + counselor.key().name(),
                        'name':
                        counselor.name,
                        'id':
                        counselor.key().name(),
                    }
                }
            })

            self.response.headers['Access-Control-Allow-Origin'] = '*'
            self.response.set_status(200)
            self.response.out.write('already assigned')
            return

        # add to task queue
        taskqueue.add(
            queue_name='QueueRoute',
            url='/route/assign',
            params={
                'uuid': uuid,
                'channel': channel,
            },
            method='GET',
        )

        # publish a message
        info = pubnub.publish({
            #'channel' : 'kid-'+ channel,
            'channel': channel,
            'message': {
                'type': 'status',
                'sender': 'SecondFriend',
                'timestamp': '',
                'payload':
                'Hello! You will be assigned to a counselor shortly.',
            }
        })

        self.response.headers['Access-Control-Allow-Origin'] = '*'
        self.response.set_status(202)
        self.response.out.write('queued')
Esempio n. 6
0
    def get(self):
        uuid = self.request.get('channel') #self.request.get('uuid')
        channel = self.request.get('channel')
        
        # check available counselors
        counselors = Counselor.all()
        counselors.filter('status >', 0)
        counselors = counselors.fetch(3)
        
        counselor = counselors[0]
        
        # assign to counselor with the least channel
        for c in counselors:
            if(len(c.channels) < len(counselor.channels)):
                counselor = c
                        
        # no counselor available
        if not len(counselors):
            logging.info('no counselor available')
            
            self.response.headers['Access-Control-Allow-Origin'] = '*'
            self.response.set_status(500)
            self.response.out.write('no counselor available')
            return

        # update the counselor model - channels
        if (channel not in counselor.channels):
            counselor.channels.append(channel)
            counselor.put()
                    
        # assign and inform the counselor
        # publish the command for counselor screen
        info = pubnub.publish({
            'channel' : 'counselor-'+ counselor.key().name(),
            'message' : {
                'action': 'create',
                'uuid': uuid,
                'channel' : channel
            }
        })

        # publish the counselor profile
        info = pubnub.publish({
            #'channel' : 'kid-'+ kid,
            'channel': channel,
            'message' : {
                'type': 'system',
                'timestamp': '',
                'payload': {
                    'action': 'counselor',
                    'avatar': 'https://second-friend.appspot.com/counselor/avatar?key='+ counselor.key().name(),
                    'name': counselor.name,
                    'id': counselor.key().name(),
                }
            }
        })
        
        # publish a message
        info = pubnub.publish({
            #'channel' : 'kid-'+ channel,
            'channel': channel,
            'message' : {
                'type': 'status',
                'sender': 'SecondFriend',
                'payload': 'You have been assigned a counselor.',
            }
        })
        
        logging.info(counselor.name)
        logging.info(counselor.key().name())

        self.response.headers['Access-Control-Allow-Origin'] = '*'
        self.response.set_status(200)
        self.response.out.write('assigned')