云存储服务broker系统(九)——桶标签及桶日志管理

华为云对象存储服务中的桶,可以设置标签 ,通过标签进行管理和分类

设置新标签

public BucketTagInfo.TagSet newTagSet(){
        BucketTagInfo.TagSet tagSet = new BucketTagInfo.TagSet();
        return tagSet;
    }

    public BucketTagInfo.TagSet addTag(BucketTagInfo.TagSet tagSet , String tag , String value){
        tagSet.addTag(tag, value);
        return tagSet;
    }

    public String setBucketTag(BucketTagInfo.TagSet tagSet,String bucketName){
        try {
            BucketTagInfo bucketTagInfo = new BucketTagInfo();
            bucketTagInfo.setTagSet(tagSet);
            obsClient.setBucketTagging(bucketName, bucketTagInfo);
        }catch (ObsException e){
            return "failed";
        }
        return "success";
    }


    public String setTag(String bucketName,List<String> tagsKey,List<String> tagsValue){
        BucketTagInfo.TagSet tag = newTagSet();
        for (int i = 0;i < tagsKey.size();i++){
            tag.addTag(tagsKey.get(i), tagsValue.get(i));
        }
        String result = setBucketTag(tag,bucketName);
        return result;
    }

每次设置标签,都使用一个完整的map,其中有一个或多个key、value键值对
一次可以设置多个标签,但设置完成后不能再添加标签,只能重新设置

获取桶标签

    public Map<String,String> getBucketTagging(String bucketName){
        Map<String,String> map = new HashMap<>();
        try {
            BucketTagInfo bucketTagInfo = obsClient.getBucketTagging(bucketName);
            if (bucketTagInfo != null){
                for(BucketTagInfo.TagSet.Tag tag : bucketTagInfo.getTagSet().getTags()){
                    System.out.println("\t" + tag.getKey() + ":" + tag.getValue());
//                    map.put("tagValue",tag.getValue());
//                    map.put("tagKey",tag.getKey());
                    map.put(tag.getKey(),tag.getKey());
            }
        }
        }catch (ObsException e){
            return null;
        }
        return map;
    }

通过桶标签列举桶

public List<ObsBucket> listBucketByTag(String tagKey, String tagValue){
        ListBucketsRequest request = new ListBucketsRequest();
        request.setQueryLocation(true);
        List<ObsBucket> buckets = obsClient.listBuckets(request);
        List<ObsBucket> result = new ArrayList<>();
        for (ObsBucket bucket : buckets){
            Map<String,String> map = getBucketTagging(bucket.getBucketName());
            if (map != null){
                String value = map.get("tagValue");
                String key = map.get("tagKey");
            if (value.equals(tagValue)&&key.equals(tagKey)){
                result.add(bucket);
            }
            }
        }

        return result;

    }

根据给出的标签,返回所有带有此标签的桶名称

删除标签

public String deleteBucketTagging(String bucketName){
        try {
            obsClient.deleteBucketTagging(bucketName);
        }catch (ObsException e){
            return "failed";
        }
        return "success";
    }

桶日志管理

开启桶日志

/* 开启桶日志 */
    public String setBuckectLogging(String targetBucketName,String targetPrefix,String bucketName){
        BucketLoggingConfiguration config = new BucketLoggingConfiguration();
//        config.setAgency(agency);
        config.setTargetBucketName(targetBucketName);
        config.setLogfilePrefix(targetPrefix);

        HuaweiController hwc = new HuaweiController();
        hwc.setBucketAclForLog(targetBucketName);
//        hwc.closeObsClient();

        // 为所有用户设置对日志对象的读权限
        GrantAndPermission grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_FULL_CONTROL);
        config.setTargetGrants(new GrantAndPermission[]{grant1});
        try{
            obsClient.setBucketLogging(bucketName, config);
        }catch (ObsException e){
            return "ObsException";
        }
        return "success";
    }

由于桶日志需要额外的桶日志投递用户组获取日志存放桶的权限,所以需要对桶给与额外的权限

/* 为所有用户设置对日志对象权限 */
    public String setGrantAndPermission(BucketLoggingConfiguration config,String bucketName,int permission){
        try{
            GrantAndPermission grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_READ);
            switch (permission){
                case 1:{
                    grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_READ_ACP);
                    break;
                }
                case 2:{
                    grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_WRITE);
                    break;
                }
                case 3:{
                    grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_WRITE_ACP);
                    break;
                }
                case 4:{
                    grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_FULL_CONTROL);
                    break;
                }
            }
            config.setTargetGrants(new GrantAndPermission[]{grant1});
            obsClient.setBucketLogging(bucketName, config);
        }catch (ObsException e){
            return "obsException";
        }
        return "success";
    }

查看桶日志配置

    /* 查看桶日志配置 */
    public Map<String,String> getBucketLogging(String bucketName){
        BucketLoggingConfiguration config = obsClient.getBucketLogging(bucketName);
        Map<String,String> map = new HashMap<>();
//        map.put("targetBucketName",config.getTargetBucketName());
//        map.put("targetPrefix",config.getLogfilePrefix());
        map.put(config.getTargetBucketName(), config.getLogfilePrefix());
        System.out.println("\t" + config.getTargetBucketName());
        System.out.println("\t" + config.getLogfilePrefix());
        return map;
    }

关闭桶日志并删除日志文件

    /* 关闭桶日志 */
    public String shutdownBucketLogging(String bucketName){
        // 对桶设置空的日志配置
        try{
            Map<String,String> map = getBucketLogging(bucketName);
            String targetBucketName = map.get("targetBucketName");
            String targetPrefix = map.get("targetPrefix");
            System.out.println(targetBucketName);
            System.out.println(targetPrefix);
            HuaweiObjectController hoc = new HuaweiObjectController();
            ListObjectsRequest request = hoc.newListRequest(targetBucketName);
            List<ObsObject> list = hoc.simpleList(request,targetPrefix);
            for (ObsObject o : list){
                hoc.deleteObject(targetBucketName,o.getObjectKey());
            }
            obsClient.setBucketLogging(bucketName, new BucketLoggingConfiguration());
        }catch (ObsException e ){
            return "ObsException";
        }
        return "success";
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值